Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django 2.0-登录的视图测试中出现KeyError_Python_Django_Django Unittest - Fatal编程技术网

Python Django 2.0-登录的视图测试中出现KeyError

Python Django 2.0-登录的视图测试中出现KeyError,python,django,django-unittest,Python,Django,Django Unittest,我在测试Django应用程序时遇到一些问题。我有一个视图,它从登录表单获取信息,然后验证/验证用户,从而将用户重定向到显示各种信息的主视图。我还设置了一个控件,这样当用户未登录并且试图插入URL“/home”时,它会将用户重定向到显示错误模板的errorpage视图 这是getLogin视图,在提交“login.html”页面中的表单时调用。我不会显示showLoginTemplate视图,因为它基本上只显示该视图 def getLogin(request): if request.user.i

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

这是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
这是我正在尝试的测试(除其他外)

我在最后一行得到一个“KeyError”:“mail”,好像它没有得到post数据。
我的视图有问题吗?还是测试有问题?

我不明白您为什么认为
响应。上下文
会包含“邮件”。我看不到您在哪里用“邮件”呈现模板“在上下文中。您是否混淆了模板上下文和POST参数?但是为什么您要验证POST参数,因为它们是您在测试中通过的参数?我只是尝试打印一些东西来验证我是否正确地执行了操作,稍后我会添加更多的代码行来声明有关正确登录的内容。那么我怎么才能得到post参数呢?但是为什么你想得到呢?它们是您在前一行中传递的内容。这有什么价值?测试内容是什么?我想测试用户是否正确登录,但如何检查您是否通过了帖子中的“邮件”呢?
    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"])