Nic*_*aub 8 python django csrf django-views
我是python的新手.Django也是新手.我正在尝试发出一个AJAX请求,并按照这里的说明进行操作.首先,检索csrf cookie的结果总是为null,所以我找到了一个名为ensure_csrf_cookie的装饰器方法.问题是它要求一个视图,我不知道要传递什么视图以及我可以在哪里获得它的引用.代码很简单:
from django.shortcuts import render_to_response
from django.core.context_processors import csrf
from django.views.decorators.csrf import ensure_csrf_cookie
def csv_to_xform(csv, template):
return render_to_response(template, { "data": "it works!" })
Run Code Online (Sandbox Code Playgroud)
我是否需要使用基于类的视图?如果是这样,有没有更好的方法来设置cookie?我不想使用这里描述的方法,因为我不想手动处理该值.
其余代码如下:
sandbox.html:
<!doctype html>
<html>
<head>
<title>Sandbox</title>
<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
<script src="/static/js/csrf.js"></script>
<script type="text/javascript">
$(function () {
$('#send-csv-btn').click(function () {
$.post('/csv', {
data: '1, 2, 3',
success: function (response) {
console.debug(response);
},
error: function (response) {
console.debug(response);
}
});
});
});
</script>
</head>
<body>
<form>
{% csrf_token %}
<input type="button" id="send-csv-btn" />
</form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
urls.py:
urlpatterns = patterns('',
url(r'^$', 'dkobo.formbuilder.views.main', name='fb'),
url(r'^admin/', include(admin.site.urls)),
url(r'^csv$', 'dkobo.formbuilder.views.csv_to_xform', { "template": "sandbox-stub.html" }),
url(r'^sandbox$', 'dkobo.formbuilder.views.sandbox')
)
Run Code Online (Sandbox Code Playgroud)
settings.py:
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
)
Run Code Online (Sandbox Code Playgroud)
Nik*_*ita 14
Cookie设置在服务器响应上,因此您需要设置@ensure_csrf_cookie装饰器以进行查看,即呈现页面,用户将从该页面发出ajax请求.
例如,如果用户浏览器在站点主页面上发出ajax-request,请将此装饰器设置为view,负责主页面.
更新:沙箱页面的ajax请求调用?然后尝试为sandbox视图设置ensure_csrf_cookie,如下所示:
@ensure_csrf_cookie
def sandbox(request):
...
Run Code Online (Sandbox Code Playgroud)
Rya*_*ent 12
对于那些寻找基于类视图的方法的人:
from django.utils.decorators import method_decorator
from django.views.decorators.csrf import ensure_csrf_cookie
class MyView(View):
@method_decorator(ensure_csrf_cookie)
def get(self, request, *args, **kwargs):
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11680 次 |
| 最近记录: |