【问题标题】:CSRF Cookie Not SetCSRF Coo​​kie 未设置
【发布时间】:2018-01-05 03:15:09
【问题描述】:

我对 Django CSRF 有疑问。当我尝试注册新用户或登录时,我收到下一个错误:未设置 CSRF cookie。同样在注册页面上,用户名和网站标签的加载不正确,我得到这样的符号:'Ð∼Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ,елÑ' 代替。

我已经试过CSRF_COOKIE_SECURE = True,django.middleware.csrf.CsrfViewMiddleware,清除浏览器数据,我的{% csrf_token %}是放在表单里面的。任何人都可以给我一些关于可能错误的提示吗?
我的代码:

forms.py:

 <form method="post" action="register/">
 {% csrf_token %}         
 {{ user_form.as_p }}
 {{ profile_form.as_p }}

views.py

def register(request):
c = {}
c.update(csrf(request))
registered = False
if request.method == 'POST':

    user_form = UserForm(data=request.POST)
    profile_form = UserProfileForm(data=request.POST)

    if user_form.is_valid() and profile_form.is_valid():

        user = user_form.save()
        user.set_password(user.password)
        user.save()
        profile = profile_form.save(commit=False)
        profile.user = user
        profile.save()
        registered = True                  
    else:
        print(user_form.errors, profile_form.errors)
else:
    user_form = UserForm()
    profile_form = UserProfileForm()
return render_to_response(
        'register.html',
        {'user_form': user_form, 'profile_form': profile_form, 'registered': registered}, c)

感谢您的考虑!

【问题讨论】:

  • 你不应该有CSRF_COOKIE_SECURE = True,除非你通过 HTTPS 为网站提供服务。

标签: python django csrf


【解决方案1】:

不要使用render_to_response,它已经过时了。请改用render

return render(request,
    'register.html',
    {'user_form': user_form, 'profile_form': profile_form, 'registered': registered})

然后您可以从视图中删除这些行:

c = {}
c.update(csrf(request))

【讨论】:

    猜你喜欢
    • 2013-07-16
    • 2018-12-30
    • 2016-04-19
    • 2016-03-16
    • 1970-01-01
    • 2020-08-22
    • 2020-09-10
    • 2019-05-06
    相关资源
    最近更新 更多