“用户”对象没有属性“方法”

Maz*_*Ali 0 python django django-users web

我只是在玩 Django 登录和注销阶段。我有一个登录页面,如果用户使用“GET”获取它,他就会获取表单,如果他提交表单,它就会提交给相同的view.login函数。问题是当我尝试使用\' if request.method==\'POST\'. 我收到一个错误\'User has not attribute method\',我不明白,为什么\'User\'传递的是对象而不是request对象?\n这里是views.py的代码:

\n\n
from django.shortcuts import render\nfrom django.http import HttpResponse, Http404, HttpResponseRedirect\nfrom .models import Flight,Passenger\nfrom django.urls import reverse\nfrom django.contrib.auth import authenticate,login, logout\nfrom django.contrib.auth.models import User\n\n\ndef index(request):\n    if not request.user.is_authenticated:\n        return render(request,"login.html")\n\n    context={\n        "flights":Flight.objects.all()\n    }\n    return render(request,"index.html",context)\n\ndef flight(request,flight_id):\n    flight= Flight.objects.get(pk=flight_id)\n    passengers = flight.passengers.all()\n    non_passengers = Passenger.objects.exclude(flight=flight).all()\n    context={\n    "flight":flight,\n    "passengers":passengers,\n    "non_passengers":non_passengers\n    }\n    return render(request,"flight.html",context)\n\ndef book(request,flight_id):\n    passenger_id = int(request.POST["passenger"])\n    flight = Flight.objects.get(pk=flight_id)\n    passenger = Passenger.objects.get(pk=passenger_id)\n    passenger.flight.add(flight)\n    return HttpResponseRedirect(reverse("flight",args=(flight_id,)))\n\ndef login(request):\n    print("\\n In LOGIN \\n")\n    if request.method==\'POST\':\n        print("\\n In POST Request \\n")\n        username = request.POST["name"]\n        password = request.POST["password"]\n        user = authenticate(request,username=username,password=password)\n        if user is not None:\n            login(user)\n        return HttpResponseRedirect(reverse("index"))\n    else:\n        return render(request,"login.html")\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是登录页面:

\n\n
<html>\n<head>\n<meta charset="utf-8">\n\n</head>\n<body>\n    <form action="{% url \'login\' %}" method="POST">\n        {% csrf_token %}\n        Name<input type="text" name="name">\n        Password<input type="password" name="password">\n        <button type="submit"> Submit </button>\n    </form>\n</body>\n\n\n</html\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是错误消息(不是完整消息):

\n\n
AttributeError at /flights/login\n\n\'User\' object has no attribute \'method\'\n\nRequest Method:     POST\nRequest URL:    http://127.0.0.1:8000/flights/login\nDjango Version:     2.0\nException Type:     AttributeError\nException Value:    \n\n\'User\' object has no attribute \'method\'\n\nException Location:     E:\\Web\\web dev\\Practice-code\\mysite\\flights\\views.py in login, line 38\nPython Executable:  C:\\Users\\Mazhar Ali\\AppData\\Local\\Programs\\Python\\Python36\\python.exe\nPython Version:     3.6.6\nPython Path:    \n\n[\'E:\\\\Web\\\\web dev\\\\Practice-code\\\\mysite\',\n \'C:\\\\Users\\\\Mazhar \'\n \'Ali\\\\AppData\\\\Local\\\\Programs\\\\Python\\\\Python36\\\\python36.zip\',\n \'C:\\\\Users\\\\Mazhar Ali\\\\AppData\\\\Local\\\\Programs\\\\Python\\\\Python36\\\\DLLs\',\n \'C:\\\\Users\\\\Mazhar Ali\\\\AppData\\\\Local\\\\Programs\\\\Python\\\\Python36\\\\lib\',\n \'C:\\\\Users\\\\Mazhar Ali\\\\AppData\\\\Local\\\\Programs\\\\Python\\\\Python36\',\n \'C:\\\\Users\\\\Mazhar \'\n \'Ali\\\\AppData\\\\Local\\\\Programs\\\\Python\\\\Python36\\\\lib\\\\site-packages\']\n\nServer time:    Sat, 15 Sep 2018 08:15:26 +0000\nTraceback Switch to copy-and-paste view\n\n    C:\\Users\\Mazhar Ali\\AppData\\Local\\Programs\\Python\\Python36\\lib\\site-packages\\django\\core\\handlers\\exception.py in inner\n\n                    response = get_response(request)\n\n         ...\n    \xe2\x96\xb6 Local vars\n    C:\\Users\\Mazhar Ali\\AppData\\Local\\Programs\\Python\\Python36\\lib\\site-packages\\django\\core\\handlers\\base.py in _get_response\n\n                        response = self.process_exception_by_middleware(e, request)\n\n         ...\n    \xe2\x96\xb6 Local vars\n    C:\\Users\\Mazhar Ali\\AppData\\Local\\Programs\\Python\\Python36\\lib\\site-packages\\django\\core\\handlers\\base.py in _get_response\n\n                        response = wrapped_callback(request, *callback_args, **callback_kwargs)\n\n         ...\n    \xe2\x96\xb6 Local vars\n    E:\\Web\\web dev\\Practice-code\\mysite\\flights\\views.py in login\n\n                    login(user)\n\n         ...\n    \xe2\x96\xb6 Local vars\n    E:\\Web\\web dev\\Practice-code\\mysite\\flights\\views.py in login\n\n            if request.method==\'POST\':\n\n         ...\n    \xe2\x96\xb6 Local vars\n\nRequest information\nUSER\n\nmazharali\nGET\n\nNo GET data\nPOST\nVariable    Value\ncsrfmiddlewaretoken     \n\n\'APmMk0KHsGbdk53l1bgRGCCSaub9OVauHT6ZQvUmK5SOBy9hHcJcEHcHVjPkUs3z\'\n\nname    \n\n\'Mazhar\'\n\npassword    \n\n\'ali\'\n\nFILES\n\nNo FILES data\nCOOKIES\nVariable    Value\ncsrftoken   \n\n\'zThgQxnzqEMymKDx703M2QihSTSW0r3YGX1tm2xeI3t9DdJtN1w70VS6DIw76YW3\'\n\nsessionid   \n\n\'gyzu709und6s74mt5c6v1df499570rmp\'\n
Run Code Online (Sandbox Code Playgroud)\n

小智 5

您可以通过您的函数覆盖 django 登录方法login。只需重命名

def login(request):
Run Code Online (Sandbox Code Playgroud)

例如其他东西

def view_login(request):
Run Code Online (Sandbox Code Playgroud)

并且不要忘记更改导入和网址。