我正在尝试使用Django创建一个登录表单。我正在创建一个视图女巫将处理get和post登录请求。
这是我设计的方式:
class Login(View):
def get(self,request):
c = {}
c.update(csrf(request))
return render_to_response("login.html", c)
def post(self,request):
username = request.get('username','')
password = request.get('password','')
user = auth.authenticate(username = username, password = password)
if(user is not None):
auth.login(request,user)
return True
else:
return False
我可以获得这个表格,但是当我发布时我得到了:
'WSGIRequest' object has no attribute 'get'
错误。设计此类视图的正确方法是什么?
答案 0 :(得分:10)
您应该使用request.POST
类似dict的对象:
username = request.POST.get('username','')
password = request.POST.get('password','')
答案 1 :(得分:1)
我看到了同样的错误,因为我写了这样的装饰器:
from functools import wraps
def require_authenticated(view_function):
@wraps
def wrapped(request, *args, **kwargs):
if not request.user.is_authenticated:
return JsonResponse({"detail": "User is not authenticated"}, status=403)
return view_function(request, *args, **kwargs)
return wrapped
这里的问题是使用内置functools.wraps
(返回装饰器)的方式,解决方法是将view函数传递给它,如下所示:
from functools import wraps
def require_authenticated(view_function):
@wraps(view_function) # <- this is the fix!
def wrapped(request, *args, **kwargs):
if not request.user.is_authenticated:
return JsonResponse({"detail": "User is not authenticated"}, status=403)
return view_function(request, *args, **kwargs)
return wrapped
答案 2 :(得分:0)
您应将其用于Get方法,否则应在python 3中将Post用于post方法
username = request.GET.get('username','')
password = request.GET.get('password','')
答案 3 :(得分:0)
**value1=int(request.GET['num1'])
value2=int(request.GET['num2'])**
如果您使用的是 Python 3.9 版,请使用 GET
答案 4 :(得分:-1)
我遇到了同样的问题。尝试编写“ GET”而不是“ get”。希望它能解决。
username = request.GET('username','')
password = request.GET('password','')