【问题标题】:'WSGIRequest' object has no attribute 'get''WSGIRequest' 对象没有属性 'get'
【发布时间】:2015-04-15 10:21:45
【问题描述】:

我正在尝试使用 Django 创建一个登录表单。我正在创建一个视图女巫将处理获取和发布登录请求。

我是这样设计的:

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'

错误。设计此类视图的正确方法是什么?

【问题讨论】:

    标签: django python-2.7


    【解决方案1】:

    你应该使用request.POST类似dict的对象:

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

    【讨论】:

      【解决方案2】:

      你应该将它用于 Get 方法,否则 Post 用于 python 3 中的 post 方法

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

      【讨论】:

      【解决方案3】:

      我看到了同样的错误,因为我写了一个这样的装饰器:

      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
      

      【讨论】:

        【解决方案4】:
        **value1=int(request.GET['num1'])
        value2=int(request.GET['num2'])**
        

        如果您使用的是 python 3.9 版,请使用 GET

        【讨论】:

          【解决方案5】:

          我也遇到过同样的问题。尝试写 'GET' 而不是 'get.希望能解决。

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

          【讨论】:

            猜你喜欢
            • 2015-10-19
            • 2021-11-16
            • 2021-11-23
            • 1970-01-01
            • 1970-01-01
            • 2023-01-05
            • 2021-07-04
            • 2021-12-13
            • 1970-01-01
            相关资源
            最近更新 更多