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 条评论
登录 后参与评论

相关文章

来自专栏Danny的专栏

Java+Oracle实现事务——JDBC事务

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/...

1172
来自专栏应用案例

SSM框架搭建

ssm框架的学习小结,主要是初期环境的搭建配置以及信息的交互处理过程,非技术人员请绕道~ SpringMVC其实就是Spring框架的一个模块,是一个基于MVC...

31410
来自专栏LuckQI

学习Java基础知识,打通面试关十~IO流

1285
来自专栏marsggbo

解决ping 127.0.0.1 一般故障 问题

​故障如下图: ? 绕了好一大圈才发现是goupi防火墙搞的鬼,弄得我一些软件一直运行不了!!!!! 废话不多说,关了防火墙就行了:操作步骤如下图示 ? ​...

4225
来自专栏上善若水

013android初级篇之Android Studio 引用源码模块,jar及so文件

013android初级篇之Android Studio 引用源码模块,jar及so文件

922
来自专栏企鹅号快讯

Spring、Spring MVC、MyBatis 整合文件配置详解

使用SSM框架做了几个小项目了,感觉还不错是时候总结一下了。先总结一下SSM整合的文件配置。其实具体的用法最好还是看官方文档。 Spring:http://sp...

1776
来自专栏腾讯云安全的专栏

Resin安全配置小技巧

2004
来自专栏帅小子的日常

sso系统使用

1063
来自专栏皮振伟的专栏

[qemu][acpi]acpi overflow的分析

前言: qemu启动之后,打出了log: qemu-system-x86_64: Warning: ACPI tables are larger than 64...

3878
来自专栏FreeBuf

weblogic安全配置二三事

*本文原创作者:shewey,本文属FreeBuf原创奖励计划,未经许可禁止转载 1、引言 前段时间Java的反序列化漏洞吵得沸沸扬扬,因工作原因需要对webl...

2815

扫码关注云+社区