为什么我在Django中收到403错误“CSRF令牌丢失”?

时间:2015-02-18 18:58:03

标签: python django django-csrf

我在Firefox中使用REST Easy向Django中的简单表单发出POST请求,但是它给出了403错误“2295 CSRF令牌丢失或不正确”。

这是我的views.py(因为我在代理后面使用网络):

from django.shortcuts import render
import urllib2

def home(request):
    if request.method == 'POST':
        post = request.POST
        if 'passkey' in post:
            if post['passkey'] == '123':
                proxy = urllib2.ProxyHandler({'http': 'http://070.13095070:pujakumari123@10.1.1.19:80'})
                auth = urllib2.HTTPBasicAuthHandler()
                opener = urllib2.build_opener(proxy, auth, urllib2.HTTPHandler)
                urllib2.install_opener(opener)
                j = urllib2.urlopen(post['url'])
                j_obj = json.load(j) 
                return HttpResponse(j_obj)
    else:
        return render(request, 'packyourbag/home_page.html')

和我的模板文件:

<html>
    <body>  
        <form id="form" method="post">
            {% csrf_token %}
            url:<input type="text" name="url"/>
            Pass Key:<input type="text" name="passkey"/>
            <button type="submit" name="url_post">
                Post
            </button>
        </form>
    </body>
</html>

我正在传递一个URL和密码,而且我不知道如何传递CSRF令牌(我甚至不知道是否必须通过这个)。

2 个答案:

答案 0 :(得分:0)

这是因为您没有通过rest-easy传递CSRF令牌。你可以像@Selcuk建议的那样做,并在测试时用@csrf_exempt包装你的视图功能,或者你可以找到带有rest-easy的CSRF令牌和POST

答案 1 :(得分:0)

您可以通过在视图前添加@csrf_exempt来禁用CSRF令牌要求:

首先导入views.py:

顶部的装饰器
from django.views.decorators.csrf import csrf_exempt

然后装饰你的视图:

@csrf_exempt
def home(request): 

警告:这会使您的视图容易受到跨站点请求伪造攻击。有关详细信息,请参阅https://docs.djangoproject.com/en/1.7/ref/contrib/csrf/