Python django登录get AuthenticationForm不包含get
我试图构建一个简单的登录表单,但我总是得到Python django登录get AuthenticationForm不包含get,python,django,Python,Django,我试图构建一个简单的登录表单,但我总是得到“AuthenticationForm”对象没有属性“get”。我是使用django框架的新手,但我不确定如何解决这个问题。。。在不改变太多逻辑的情况下有什么建议吗 view.py from django.shortcuts import render, redirect from django.views.generic import TemplateView from django.contrib.auth import authenticate
“AuthenticationForm”对象没有属性“get”
。我是使用django框架的新手,但我不确定如何解决这个问题。。。在不改变太多逻辑的情况下有什么建议吗
view.py
from django.shortcuts import render, redirect
from django.views.generic import TemplateView
from django.contrib.auth import authenticate
from django.contrib.auth.forms import AuthenticationForm
from django.http import HttpResponse
class loginPage(TemplateView):
template_name = 'login.html'
def post(self, request):
form = AuthenticationForm(request, data=request.POST)
if form.is_valid():
user = authenticate(
request,
username=form.get('email'),
password=form.get('password')
)
if user is not None:
return HttpResponse("Testing")
else:
print(user)
else:
return HttpResponse("loginPage") ## always goes here
登录html
<form method="post">
{% csrf_token %}
<input class="form-control" name="email" placeholder="Email" /></div>
<input class="form-control" type="password" name="password" placeholder="Password" />
</form>```
{%csrf_令牌%}
```
如果由于
form
对象不是字典实例而导致出现错误,请尝试使用form.cleaned\u data.get('email')
此外,我相信如果您使用django提供的genericLoginView
而不是TemplateView
,代码会少得多。这里有一个同样的例子
url.py
from django.contrib.auth.views import LoginView
urlpatterns = [
path('login/', LoginView.as_view(template_name="users/login.html"), name='login'),
您可以自定义这方面的每个方面,在上面的示例中,我刚刚使用了自定义模板,而不是使用django的默认模板,类似地,您也可以通过将authentication\u form
设置为适当的表单类来使用自己的表单
欲了解更多信息,请查看官方文档,而不是使用get-try-using
form.cleaned_data['key']
@error404我还试图更改为username=form.cleandata['email'],
或`username=form.cleandata['email'],
,,但是似乎没有任何东西起作用cleandata
与cleanded_data
不同,这是评论者正确建议您使用的。我的输入看起来像username=form.cleanded_data['email']
,和password=form.cleanded_data['password'],
,但它仍然是相同的错误您也可以尝试这个form.instance.email
或尝试这个form.data['email']
,老实说,与上面相同,但看起来我是在请求post,但发送get,但form
是post,并且是相同的pythonlogin@AmitPatel,如果您能在回答中添加一些解释,那就太好了:)
from django.contrib.auth.views import LoginView
urlpatterns = [
path('login/', LoginView.as_view(template_name="users/login.html"), name='login'),