я не могу зайти на страницу - PullRequest
0 голосов
/ 05 декабря 2018

Я пытаюсь создать страницу входа для пользователей, которых я создал с помощью администратора django.Но по приведенному ниже коду я не могу войти, т.е. после нажатия кнопки входа я не перенаправлен на страницу, которую я дал.

forms1.py

    from django import forms

    class UserForm(forms.Form):
        username = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 
    'Username'}))
        password = forms.CharField(widget=forms.PasswordInput(attrs= 
   {'placeholder': 'Password'}))
        fields = ['username', 'password']

views.py

    def Userform(request):
        if request.method == 'POST':
            form = UserForm(request.POST)
            if form.is_valid():
                userObj = form.cleaned_data
                username = userObj['username']
                password = userObj['password']
                user = authenticate(Username=username, password=password)
                if user is not None:
                    login(request, user)
                    return HttpResponseRedirect('/user/')
        else:
            form = UserForm()
        return render(request, 'index.html', {'form' : form})  

urls

    urlpatterns = [
    path('admin/', admin.site.urls),
    path('user/',user),
    path('login/',Userform),
    ]

index.html

     <form class="login-form" method="post" action="">
                {% csrf_token %}
                {{ form.as_p }}
                 <button type="submit">login</button>                 
     </form>

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

Вам не нужно создавать UserForm, так как есть встроенные функции, которые будут обрабатывать логин, выход из системы и пароли, используя django.contrib.auth.

Хорошего чтения https://docs.djangoproject.com/en/2.1/topics/auth/default/

Может быть, что-то вроде:

views.py

from django.contrib.auth import authenticate, login as auth_login

def login(request):
    if request.method == "POST":
         user = authenticate(username=request.POST['username'], password=request.POST['password'])
         if user is not None:
             auth_login(request, user)
             return redirect('user')
    else:
        return render(request, 'login.html')

urls.py

from django.contrib.auth import views as auth.views

path('login/', auth_views.login, name='login')

с использованием auth.views.login попытается отобразитьlogin.html по умолчанию.Поэтому переименуйте index.html в login.html

login.html

<form method="POST">
 {% csrf_token %}
 {{ form.as_p }}
  <button type="submit">Login</button>
</form>
0 голосов
/ 05 декабря 2018

Кажется, с вашим кодом есть некоторые проблемы

forms1.py

Прежде всего поля должны быть частью метакласса.Во-вторых, вам на самом деле не нужны поля, потому что вы вручную берете поля

views.py

user = authenticate (Имя пользователя = имя пользователя, пароль = пароль)

Имя пользователя должно быть строчными username.Но это, вероятно, просто опечатка.

Наконец, вам на самом деле не нужно делать свое представление для входа в систему.Есть встроенные функции, доступные в authviews

Auth Views

...