首页 > 解决方案 > Django 2.0 - 登录查看测试中的 KeyError

问题描述

我在测试我的 Django 应用程序时遇到了一些问题。我有一个从登录表单获取信息然后验证/验证用户的视图,因此将他重定向到显示各种信息的主视图。我还设置了一个控件,以便当用户未登录并尝试插入 URL“/home”时,它会将他重定向到显示错误模板的错误页面视图。

这是 getLogin 视图,在“login.html”页面中的表单被提交时调用。我不会显示 showLoginTemplate 视图,因为它基本上只是这样做的。

def getLogin(request):
if request.user.is_authenticated:
    ...
    # operations and context creation
    ...
    return render(request, 'myapp:home', context)
else:
    if request.method == "POST":
        email = request.POST['mail']
        password = request.POST['psw']
        user = authenticate(request, username=email, password=password)
        if user is not None:
            auth_login(request, user) #the Django login renamed as auth_login
            ...
            # operations and context creation
            ...
            return redirect("/home", context)
        else:
            return redirect('/login/error', errorLogin='error')
            # shows the same page but with a login error message
    else:
        return redirect("myapp:errorpage")

主视图:

def home(request):
   if request.user.is_authenticated:
       # operations and context creation
       return render(request, 'users/home.html', context)
   else:
       return redirect("myapp:errorpage")
       #goes into a error page

这是我正在尝试的测试(除其他外)

    def testHomeWithLogin(self):
       user = User.objects.create(username="qwerty@gmail.com", 
              email="qwerty@gmail.com", password="qwerty")
       print(user.username)
       response = self.client.post("/login/#", {
        "mail": "qwerty@gmail.com", "psw": "qwerty"
       })
       print(response.context["mail"])

我在最后一行收到“KeyError”:'mail'“,就像它没有获得发布数据一样。我是在视图上做错了什么还是测试?

标签: pythondjangodjango-unittest

解决方案


推荐阅读