Django提交表单时遇到403错误:CSRF verification failed

django 提交表单 提示403:CSRF verification failed 后台日志:

UserWarning: A {% csrf_token %} was used in a template, but the context did not provide the value.  This is usually caused by not using RequestContext.
  "A {% csrf_token %} was used in a template, but the context "
[15/Mar/2018 15:20:40] "GET /users/login/ HTTP/1.1" 200 2193
Forbidden (CSRF token missing or incorrect.): /users/login/
[15/Mar/2018 15:20:47] "POST /users/login/ HTTP/1.1" 403 2497

我前端模板form代码如下

           <form class="m-t" role="form" method="post" action={% url 'users:login' %} autocomplete="off">
                         {% csrf_token %}
                         {{ form_login.as_p }}
                     <div class="auto-box marb38">
                          <button type="submit" class="btn btn-primary block full-width m-b">Login</button>
                         <input type="hidden" name="next" value="{{ redirect_url }}" />
                     </div>
                          </form>

view代码如下

class LoginView(View):
    '''用户登录'''
    error=""
    def get(self, request):

        form_login = LoginForm()
        redirect_url = request.GET.get('next', '')
        return render_to_response('users/login_two_columns.html',{"form_login":form_login,"redirect_url":redirect_url})

    def post(self, request):
        form_login = LoginForm(request.POST)
        if form_login.is_valid():
            username = form_login.cleaned_data['username']
            password = form_login.cleaned_data['password']
            user = authenticate(username=username, password=password)
            # 如果不是null说明验证成功
            if user is not None:
                # login_in 两参数:request, user
                # request是要render回去的。这些信息也就随着返回浏览器。完成登录
                login(request, user)
                # request.session['is_login']=request.user
                request.session["username"] = request.user.id
                request.session.set_expiry(600)
                # 跳转到首页 user request会被带回到首页
                redirect_url = request.POST.get('next', '')
                if redirect_url:
                    return HttpResponseRedirect(redirect_url)
                # 跳转到首页 user request会被带回到首页
                return HttpResponseRedirect(reverse("index"))

            return render_to_response( 'users/login_two_columns.html',
                          {"msg": "用户名不存在!",
                           "form_login": form_login,
                           })

模板中也确实加了{% csrf_token %} 后来查看了这篇文章解决了这个问题 https://stackoverflow.com/questions/24642676/userwarning-a-csrf-token-was-used-in-a-template-views-py-not-recognisei 解决: 把render_to_response改成render即可 结论: {% csrf_token %}的生成需要request的传入,而render_to_response与render在源码上的差别,只在于是否有request的传入,所以render可以工作而render_to_response不可以

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏飞雪无情的博客

使用Nginx搭建PHP服务器

一般我们都是采用Apache 作为PHP的解析服务器,这次则是采用Nginx这个强大的反向代理服务器来搭建PHP服务器。下面就以Linux发行版Ubuntu为例...

593
来自专栏郭少华

Linux中inotify+unison实现数据双向(多向)实时同步

842
来自专栏问天丶天问

Mysql忘记root密码,修改root密码

1145
来自专栏linjinhe的专栏

Linux动态链接

曾经不止一次遇到过这样的情况:从机器A拷贝一个二进制文件到另一台机器B,两台机器的操作系统版本一样,可是在机器A能正常运行,在机器B却提示错误。最常见的就是提示...

1858
来自专栏边子政的专栏

【腾讯云的1001种玩法】在QCloud的 CentOS 下搭建一个适用于个人的 SVN 环境

安装 SVN检查是否安装rpm -qa subversion卸载旧版本yum remove subversion安装最新版本yum install subver...

4450
来自专栏java一日一条

Java开发必会的Linux命令

本文并不会对所有命令进行详细讲解,只给出常见用法和解释。具体用法可以使用--help查看帮助或者直接通过google搜索学习。

592
来自专栏Java帮帮-微信公众号-技术文章全总结

Git常用命令

Git 是一个很强大的分布式版本控制系统。它不但适用于管理大型开源软件的源代码,管理私人的文档和源代码也有很多优势。 Git常用操作命令: 1) 远程仓库相关命...

3496
来自专栏主机笔记

windows2003为iis添加伪静态规则

最近开始使用一个新的cms,网站由于是基于thinkphp开发的,而服务器还是古老的windows2003,所以一些伪静态的问题导致网站始终安装不成功。 可能以...

2608
来自专栏从零开始学自动化测试

python笔记25-mock-server之moco环境搭建

mock除了用在单元测试过程中,还有一个用途,当前端开发在开发页面的时候,需要服务端提供API接口 此时服务端没开发完成,或者说没搭建测试环境,这个时候前端开发...

922
来自专栏逸鹏说道

安装和搭建基于netcore的demo

系统CentOS安装:   网上很多教程,很详细,我就不再赘述了。在安装过程中,需要注意的是设置时区、个人账户密码、root密码(一定要注意,否则后续很麻烦)、...

3479

扫码关注云+社区