为什么我在使用 Django 时会收到 403 错误“缺少 CSRF 令牌”?

Why am I getting a 403 error “CSRF token missing” with Django?

我在 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 令牌(我什至不知道是否必须传递这个)。

这是因为您没有通过 rest-easy 传递 CSRF 令牌。您可以按照@Selcuk 的建议进行操作,并在测试时用 @csrf_exempt 包装视图函数,或者您可以找到 CSRF 令牌和 POST rest-easy

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

首先在 views.py:

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

然后像这样装饰你的视图:

@csrf_exempt
def home(request): 

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