Django, как проверить, если имя пользователя уже существует и вернуть изящно - PullRequest
1 голос
/ 27 сентября 2019

Django проверяет, существует ли введенное имя пользователя, и если оно существует, оно падает с ошибкой.

Я хочу, чтобы он проверял, существует ли имя пользователя так же, как он проверяет, является ли электронная почта действительной или что пароли являютсясоответствует, т.е. возвращает соответствующее HTML-сообщение пользователю.

это моя попытка сделать это из view.py

    if request.method == 'POST':
    form = SubscriberForm(request.POST)
    if form.is_valid():
        # Unpack form values
        username = form.cleaned_data['username']
        password = form.cleaned_data['password1']
        email = form.cleaned_data['email']
        first_name = form.cleaned_data['first_name']
        last_name = form.cleaned_data['last_name']

        # Create the User record    
        user = User(username=username, email=email,
                    first_name=first_name, last_name=last_name)

        if User.objects.filter(username=username).exists():
            context= {'form': form, 'error':'The username you entered has already been taken. Please try another username.'}
            return render(request, template, context)

это моя HTML-форма (соответствующая часть):

                <h5 class="sn-sh">CREATE A USERNAME AND PASSWORD</h5>
            <table class="table">
                <tbody>
                    <tr>
                        <th>{{ form.username.label }}</th>
                        <th>{{ form.email.label }}</th>
                    </tr>
                    <tr>
                        <td>{{ form.username }}</td>
                        <td>{{ form.email }}</td>
                    </tr>
                    <tr>
                        <td>{{ form.username.errors }}</td>
                        <td>{{ form.email.errors }}</td>
                    </tr>
                    <tr>
                        <th>Password</th>
                        <th>Confirm Password</th>
                    </tr>
                    <tr>
                        <td>{{ form.password1 }}</td>
                        <td>{{ form.password2 }}</td>
                    </tr>
                    <tr>
                        <td>{{ form.password1.errors }}</td>
                        <td>{{ form.password2.errors }}</td>
                    </tr>
                </tbody>
            </table>    

В настоящее время он не является поклонником, но не возвращает пользователю никакого сообщения ... (на самом деле ничего не происходит)

Что я делаю не так?Как я могу заставить его отправить приятное сообщение пользователю?

Я пытался использовать ValidationError - но он также просто потерпел крах и отправил ужасное сообщение пользователю

----- edit---- Я добавил уродливое решение, которое работает

Я добавил в Forms.py следующие строки:

from django.contrib.auth.models import User
.
.
.
class SubscriberForm(AddressMixin, UserCreationForm):
.
.
.
def clean_username(self):
    username = self.cleaned_data['username']

    if User.objects.filter(username=username).exists():     
        raise forms.ValidationError("User name already exist, please choose new one")
    return username

Это решение, насколько я тестировал работу - но оно уродливо и кажется, что зазвонило(Теперь у меня есть функциональные возможности views.py внутри forms.py - надеюсь, что у вас есть лучшее решение, обеспечивающее чистоту модели django

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...