对于如何禁用Django的CSRF验证?感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解djangocsrf验证失败,并且为您提供关于CSRF验证失败。请求中止。在Django上、CSRF验
对于如何禁用Django的CSRF验证?感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解django csrf验证失败,并且为您提供关于CSRF验证失败。请求中止。在Django上、CSRF验证失败请求中止在Django上、Django Admin – CSRF验证失败.请求中止、django – CSRF验证失败.请求中止.当我发送POST请求时的宝贵知识。
本文目录一览:- 如何禁用Django的CSRF验证?(django csrf验证失败)
- CSRF验证失败。请求中止。在Django上
- CSRF验证失败请求中止在Django上
- Django Admin – CSRF验证失败.请求中止
- django – CSRF验证失败.请求中止.当我发送POST请求时
如何禁用Django的CSRF验证?(django csrf验证失败)
我已在中注释掉了csrf处理器和中间件产品线settings.py:
122 123 TEMPLATE_CONTEXT_PROCESSORS = (124 ''django.contrib.auth.context_processors.auth'',125 # ''django.core.context_processors.csrf'',126 ''django.core.context_processors.request'',127 ''django.core.context_processors.static'',128 ''cyathea.processors.static'',129 )130 131 MIDDLEWARE_CLASSES = (132 ''django.middleware.common.CommonMiddleware'',133 ''django.contrib.sessions.middleware.SessionMiddleware'',134 # ''django.middleware.csrf.CsrfViewMiddleware'',135 ''django.contrib.auth.middleware.AuthenticationMiddleware'',136 ''django.contrib.messages.middleware.MessageMiddleware'',137 ''django.middleware.locale.LocaleMiddleware'',138 # Uncomment the next line for simple clickjacking protection:139 # ''django.middleware.clickjacking.XFrameOptionsMiddleware'',140 )
但是,当我使用Ajax发送请求时,Django仍然会响应“ csrf令牌不正确或丢失”,并且在将X-CSRFToken添加到标头后,请求将会成功。
这里发生了什么 ?
答案1
小编典典如果只需要一些视图而不使用CSRF,则可以使用@csrf_exempt:
from django.views.decorators.csrf import csrf_exempt@csrf_exemptdef my_view(request): return HttpResponse(''Hello world'')
CSRF验证失败。请求中止。在Django上
我正在关注Django 1.3 Web开发。对于登录,我收到以下错误
Forbidden (403)CSRF verification failed. Request aborted.HelpReason given for failure: CSRF token missing or incorrect.
这是我的settings.py随附的APPS。这正是书上所说的样子。
INSTALLED_APPS = ( ''django.contrib.auth'', ''django.contrib.contenttypes'', ''django.contrib.sessions'', ''django.contrib.sites'', ''django.contrib.messages'', ''django.contrib.staticfiles'', # Uncomment the next line to enable the admin: ''django.contrib.admin'', # Uncomment the next line to enable admin documentation: # ''django.contrib.admindocs'', ''djangocricket.Cricket'', ''djangocricket.cms'')
这本书说,它应该包含django.contrib.auth.views.login ..并且我将其包含在
urlpatterns = patterns('''', # Examples: url(r''^$'', ''djangocricket.Cricket.views.index'', name=''default''), url(r''^user/(\w+)/$'', ''djangocricket.Cricket.views.user_home'', name=''user home''), url(r''^login/$'', ''django.contrib.auth.views.login''), # url(r''^djangocricket/'', include(''djangocricket.foo.urls'')), # Uncomment the admin/doc line below to enable admin documentation: #url(r''^admin/doc/'', include(''django.contrib.admindocs.urls'')), # Uncomment the next line to enable the admin: url(r''^news/'', ''djangocricket.cms.views.index'', name=''index''), #url(r''^news/(?P<slug>[^\.]+).html'', ''djangocricket.cms.views.detail'', name=''get_single_news_item''), url(r''^admin/'', include(admin.site.urls)),)
和我的registration / login.html …复制自本书的副本。它应该做。
<html><head> <title>Django Bookmarks - User Login</title></head><h1>User Login</h1>{% if form.errors %} <p>Your username and password didn''t match. Please try again.</p>{% endif %}<form method="post" action="."> <p><label for="id_username">Username:</label> {{ form.username }}</p> <p><label for="id_password">Password:</label> {{ form.password }}</p> <input type="hidden" name="next" value="/" /> <input type="submit" value="login" /></form></body></html>
答案1
小编典典你需要将{% csrf_token %}
模板标记添加为form
Django模板中元素的子代。
这样,模板将呈现一个隐藏元素,其值设置为CSRF令牌。当Django服务器收到表单请求时,Django将验证令牌与表单中呈现的值匹配。这对于确保POST请求(即,数据更改请求)源自真实的客户端会话是必要的。
CSRF验证失败请求中止在Django上
如何解决CSRF验证失败请求中止在Django上?
你需要将{% csrf_token %}
模板标记添加为form
Django模板中元素的子代。
这样,模板将呈现一个隐藏元素,其值设置为CSRF令牌。当Django服务器收到表单请求时,Django将验证令牌与表单中呈现的值匹配。这对于确保POST请求(即,数据更改请求)源自真实的客户端会话是必要的。
解决方法
我正在关注Django 1.3 Web开发。对于登录,我收到以下错误
Forbidden (403)
CSRF verification failed. Request aborted.
Help
Reason given for failure:
CSRF token missing or incorrect.
这是我的settings.py随附的APPS。这正是书上所说的样子。
INSTALLED_APPS = (
''django.contrib.auth'',''django.contrib.contenttypes'',''django.contrib.sessions'',''django.contrib.sites'',''django.contrib.messages'',''django.contrib.staticfiles'',# Uncomment the next line to enable the admin:
''django.contrib.admin'',# Uncomment the next line to enable admin documentation:
# ''django.contrib.admindocs'',''djangocricket.Cricket'',''djangocricket.cms''
)
这本书说,它应该包含django.contrib.auth.views.login ..并且我将其包含在
urlpatterns = patterns('''',# Examples:
url(r''^$'',''djangocricket.Cricket.views.index'',name=''default''),url(r''^user/(\w+)/$'',''djangocricket.Cricket.views.user_home'',name=''user home''),url(r''^login/$'',''django.contrib.auth.views.login''),# url(r''^djangocricket/'',include(''djangocricket.foo.urls'')),# Uncomment the admin/doc line below to enable admin documentation:
#url(r''^admin/doc/'',include(''django.contrib.admindocs.urls'')),# Uncomment the next line to enable the admin:
url(r''^news/'',''djangocricket.cms.views.index'',name=''index''),#url(r''^news/(?P<slug>[^\.]+).html'',''djangocricket.cms.views.detail'',name=''get_single_news_item''),url(r''^admin/'',include(admin.site.urls)),)
和我的registration / login.html …复制自本书的副本。它应该做。
<html>
<head>
<title>Django Bookmarks - User Login</title>
</head>
<h1>User Login</h1>
{% if form.errors %}
<p>Your username and password didn''t match.
Please try again.</p>
{% endif %}
<form method="post" action=".">
<p><label for="id_username">Username:</label>
{{ form.username }}</p>
<p><label for="id_password">Password:</label>
{{ form.password }}</p>
<input type="hidden" name="next" value="/" />
<input type="submit" value="login" />
</form>
</body>
</html>
Django Admin – CSRF验证失败.请求中止
每当我尝试登录Django的管理员应用程序时,在填写用户名和密码并提交表单后,该页面将永久挂起.
当我在浏览器中刷新POST请求时,我得到:
CSRF verification Failed. Request aborted.
当我再次刷新页面时,一切正常,我看到管理员应用程序,我已登录,我可以在我的应用程序和表格上进行CRUD操作.
有什么想法吗?
我在Django应用程序前面有Nginx反向代理做https握手.所以,当你去(例子):
https://platform.staging.com/admin/
Nginx反向代理那个
http://admin1.staging.platform.com/admin/
这是我的Nginx配置:
upstream admin-cluster {
ip_hash;
server admin1.staging.platform.com;
}
# force redirect of http to https
# application will be available only over https
server {
listen 80 default;
server_name platform.staging.com;
rewrite ^ https://$server_name$request_uri? permanent;
}
# https server
# traffic is going to local web servers over normal http
# front Nginx proxy server will hold ssl session
server {
listen 443 ssl spdy;
server_name platform.staging.com;
keepalive_timeout 70;
ssl on;
ssl_certificate /etc/ssl/platform.staging.com.crt;
ssl_certificate_key /etc/ssl/platform.staging.com.key;
location /admin {
proxy_pass http://admin-cluster;
}
}
编辑:
所以,我找到了一个解决方法.当我在我的Nginx反向代理上同时允许端口80但是将所有http请求重定向到这样的https:
server {
listen 80 default;
server_name platform.staging.com;
rewrite ^ https://$server_name$request_uri? permanent;
}
它解决了这个问题.知道为什么吗?
解决方法:
检查您的设置是否有覆盖SESSION_COOKIE_SECURE和CSRF_COOKIE_SECURE值的值,因为问题可能与CSRF cookie有关.编辑:我实际上这两个值设置为True.
另外,请检查您的SECURE_PROXY_SSL_HEADER
设置,但我不确定它与您的问题有关.我在你的Nginx conf文件中缺少一个proxy_set_header X-Forwarded-Protocol指令,用于让Django知道你正在通过一个代理.
django – CSRF验证失败.请求中止.当我发送POST请求时
POST看起来像:
http://example/my_page_url/1000
1000是一个ID.
这是我的观点方法:
def inventory(request,cross_id): text_file = open("test.txt","w") text_file.write('POST Received') text_file.write(cross_id.__str__()) text_file.close() return render(request,'Inventory.html',{})
我的模板代码:
<form action='' method="POST"> <button type="submit" id="btn_save" name="btn_save">Save</button> {% csrf_token %} </form>
实际上,我并不需要调用模板,因为我只想在服务器上执行某些操作.但我现在调用模板只是为了防止任何错误.
我已经阅读了相同问题的其他答案,但是他们都错过了模板中的CSRF令牌或者其他方法,但我相信这里的情况有所不同.
解决方法
您可以从名为csrftoken的cookie中获取此标头的相应值.
要在Postman中测试它,您需要启用Interceptor插件(右上角).
安装完成后,向/ admin / login /发出GET请求(确保从浏览器中的站点注销).在cookies部分中,您应该看到名为csrftoken的cookie,复制其值.
现在,将请求类型设置为POST以获取相同的URL(/ admin / login),使用您之前复制的值添加名为X-CSrftoken的标头.在Body部分中设置用户名和密码字段,然后点击发送.
如果您的POST不需要身份验证,则可以使用早期GET请求中的csrftoken.
我们今天的关于如何禁用Django的CSRF验证?和django csrf验证失败的分享就到这里,谢谢您的阅读,如果想了解更多关于CSRF验证失败。请求中止。在Django上、CSRF验证失败请求中止在Django上、Django Admin – CSRF验证失败.请求中止、django – CSRF验证失败.请求中止.当我发送POST请求时的相关信息,可以在本站进行搜索。
本文标签: