django的csrf踩坑

环境:python3.6 django2.1
今天照着一本书上练习django的session功能时,发现使用form表单提交时总是403错误,我在form表单中也使用了{% csrf_token %},其他的感觉也没错,但是折腾了一上午,我发现是按照书上的思路导致我形成的思维定式了,根源是出在views.py中,说起来,知道错误后感觉自己好二。。。话不多说,直接上代码了


login.html的代码





    
    登陆分享日记



    
{% if message %}
{{ message }}
{% endif %}

登陆我的私人日记

{% csrf_token %}

这个是错误的views.py的代码

from django.shortcuts import render, HttpResponse, redirect, render_to_response
from django.template.loader import get_template
def login(request):
    # 如果是POST方法提交
    if request.method == 'POST':
        # 查看窗体属性的正确性
        username = request.POST['user_name']
        usercolor = request.POST['user_color']
        message = "登陆成功"

        response = render_to_response("login.html", locals())
        response.set_cookie('username', username)
        response.set_cookie('usercolor', usercolor)
    else:
        # 这里出的错
        response = render_to_response("login.html")
    return response

这个是改正后的views.py代码

from django.shortcuts import render, HttpResponse, redirect, render_to_response
from django.template.loader import get_template

def login(request):
    # 如果是POST方法提交
    if request.method == 'POST':
        # 查看窗体属性的正确性
        username = request.POST['user_name']
        usercolor = request.POST['user_color']
        message = "登陆成功"

        response = render_to_response("login.html", locals())
        response.set_cookie('username', username)
        response.set_cookie('usercolor', usercolor)
    else:
       # 改成render就好了...
       response = render(request, "login.html")
    return response

你可能感兴趣的:(django的csrf踩坑)