'WSGIRequest'对象没有属性'get'。

18

我正在尝试使用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'

错误。如何正确设计此类视图?

6个回答

27

您应该使用类似字典的request.POST对象:

username = request.POST.get('username','')
password = request.POST.get('password','')

5

在Python 3中,如果使用Get方法,请使用这个,否则请使用Post方法进行POST请求。

  username = request.GET.get('username','')
  password = request.GET.get('password','')

2
欢迎,@Chirag Sukhwani。似乎不相关,因为已经有一个现有的答案了。https://dev59.com/9l4b5IYBdhLWcg3w9FgI#28515508 - Willian

0
**value1=int(request.GET['num1'])
value2=int(request.GET['num2'])**

如果你使用的是Python 3.9版本,只需使用GET即可。


0

我遇到了同样的错误,因为我编写了类似于这样的装饰器:

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内置函数(它返回一个装饰器),解决方法是将视图函数传递给它,像这样:
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

0
如果您不想将views.py中的函数放在urls.py中,那么可以这样做。
path('<urlsname>', views.<view_function>)

但是你已经写了views.<form_class name>,但仍然出现了这个错误


-2
我曾遇到过同样的问题。尝试写成“GET”而不是“get”。希望能解决问题。
username = request.GET('username','')
password = request.GET('password','')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接