代码之家  ›  专栏  ›  技术社区  ›  L.Mann

未设置CSRF Cookie

  •  0
  • L.Mann  · 技术社区  · 7 年前

    我对Django CSRF有问题。当我尝试注册新用户或登录时,会出现下一个错误:未设置CSRF cookie。此外,在注册页面上,用户名和网站标签的加载不正确,我得到的符号如下:“·°”。

    我已经试过CSRF\u COOKIE\u SECURE=True,django。中间件。csrf。CsrfViewMiddleware,清除浏览器数据,我的{%csrf\U令牌%}放在表单中。有人能给我一些关于可能出现的错误的提示吗?
    我的代码:

    形式。py:

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

    意见。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)
    

    感谢您的考虑!

    1 回复  |  直到 7 年前
        1
  •  0
  •   Alasdair    7 年前

    不使用 render_to_response ,它已经过时了。使用 render 相反

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

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

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