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>
答案 0 :(得分:0)
您的代码似乎存在一些问题
forms1.py
首先,所有字段都应该是Meta类的一部分。其次,您实际上不需要字段,因为您是手动输入字段
views.py
user = authenticate(用户名=用户名,密码=密码)
用户名应为小写username
。但这可能只是这里的错字。
最后,您实际上不需要创建视图即可登录。 authviews中有内置的功能
答案 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>