我无法登录页面

时间:2018-12-05 15:06:54

标签: django django-forms django-views django-login

iam试图为我使用django admin创建的用户创建登录页面。但是通过下面的代码,我无法登录,即单击登录按钮后,我没有重定向到我给定的页面。

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})  

网址

    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 :(得分:0)

您的代码似乎存在一些问题

forms1.py

  

首先,所有字段都应该是Meta类的一部分。其次,您实际上不需要字段,因为您是手动输入字段

views.py

  

user = authenticate(用户名=用户名,密码=密码)

用户名应为小写username。但这可能只是这里的错字。

最后,您实际上不需要创建视图即可登录。 authviews中有内置的功能

Auth Views

答案 1 :(得分:0)

您不需要创建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>
相关问题