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的代码:
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")\nRun 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\nRun Code Online (Sandbox Code Playgroud)\n\n这是错误消息(不是完整消息):
\n\nAttributeError 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\'\nRun 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)
并且不要忘记更改导入和网址。