Django 报错 AttributeError: 'WSGIRequest' object has no attribute 'get' 的解决方案

Django 报错 AttributeError: ‘WSGIRequest’ object has no attribute ‘get’ 的解决方案


Django 的报错信息有时候比较隐晦,对于我这样的新手司机不是很友好,这里记录一下今天碰到的一条报错信息的排查和解决方案。

AttributeError: 'WSGIRequest' object has no attribute 'get',从报错信息上来看,我对全局的 request 对象调用了 get 方法,然而它并没有 get 方法。

从下至上排查 traceback 信息,主要关注自己写的代码,因为框架基本没可能错。确定错误在 views.py 的某个视图函数中。

views.py

# 略略略

class LoginView(View):
    def get(self, request):
        return render(request, 'login.html')

    def post(self, request):
        form = LoginForm(request)
        if form.is_valid():
            email = form.cleaned_data.get('email')
            password = form.cleaned_data.get('password')
            user = User.objects.filter(email=email, password=password).first()
            if user:
                request.session['session_id'] = user.pk
                return redirect('index')
            else:
                print('用户名或者密码错误!')
                return redirect('login')
        else:
            print(form.errors)
            return redirect('login')

if form.is_valid(): 这一行出错,它上面一行代码没写对,应为 form = LoginForm(request.POST)
虽然这是很常规的查 bug 方式,但是如果报错信息能更精确一点,带有 is_valid 字样就好了。


完成于 2019.6.14

你可能感兴趣的:(烧瓶战狗)