首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用ensure_csrf_cookie?

如何使用ensure_csrf_cookie?
EN

Stack Overflow用户
提问于 2013-11-21 13:56:41
回答 4查看 19.8K关注 0票数 12

我对蟒蛇很陌生。对Django来说也是新的。我正在尝试发出AJAX请求,并遵循这里的说明。起初,检索cookie的结果总是为null,所以我找到了一个名为ensure_csrf_cookie的装饰器方法。问题是它要求一个视图,我不知道要传递哪个视图,也不知道在哪里可以获得对它的引用。代码非常简单:

代码语言:javascript
运行
复制
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!" })

我需要使用基于类的视图吗?如果是的话,是否有更好的方法来设置cookie?我不想使用描述的这里方法,因为我不想手动处理这个值。

其余代码如下:

sandbox.html:

代码语言:javascript
运行
复制
<!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>

urls.py:

代码语言:javascript
运行
复制
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')
)

settings.py:

代码语言:javascript
运行
复制
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',
)
EN

Stack Overflow用户

发布于 2013-11-21 14:40:31

尽管你已经发现了你想要的东西,但这些概念会对你有帮助。

视图是在请求URL时调用的函数。有两种观点:

  1. 基于功能的视图
  2. 类的视图。

视图的基本工作是处理HttpRequest并发送HttpResponse。每个返回HttpResponse的视图都必须有一个请求参数。

以职能为基础的观点:

代码语言:javascript
运行
复制
def myView(request):
   ...
  # process the request here
   return HttpResponse() # or render_to_response depending upon what you want.

在您的视图中,我没有看到request参数。

现在,装潢师是在视图中设置特定条件的东西。

例如:如果您有用于注释的视图函数,并且希望用户登录到注释中,那么您可以在视图上使用login_required装饰器。

这将确保任何想要评论的人首先需要登录。基本语法是:

代码语言:javascript
运行
复制
@login_required   # this is the decorator
def comment(request):   # this is the view on which the decorator is acting upon
 ...
 ... 
 return HttpResponse()

与@login_required类似,@ensure_csrf_cookie是一个装饰师。

票数 3
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20122891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档