为什么我在使用 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/。
我在 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/。