gpt4 book ai didi

Django:POST 表单需要 CSRF? GET 没有?

转载 作者:行者123 更新时间:2023-12-04 14:06:39 25 4
gpt4 key购买 nike

使用 POST 方法的表单是否需要具有 CSRF 保护?我正在关注一本书,代码示例抛出 403 错误。我做了一些搜索,似乎我需要在所有表单中启用 CSRF。

我的问题是:

  • Django 现在是否要求保护所有 POST 表单免受 CSRF 的影响?
  • 我需要做的就是添加'django.middleware.csrf.CsrfViewMiddleware',返回render_to_response(template,dictionary,context_instance=RequestContext(request),并在相应的表单中添加'{% csrf_token %}'吗?我是这里有什么遗漏吗?

  • 当我这样做时,表单工作正常。当这些部分中的任何一个丢失时,它会失败 403。我只是想确保我做对了。 :)

    提前致谢。

    编辑:

    出于某种原因,这段代码对我来说没有意义,但它没有返回任何错误。请忽略原始验证,因为我还没有进入书中展示更有效方法的部分。
    def contact(request):
    errors = []

    if request.method == 'POST':
    if not request.POST.get('subject',''):
    errors.append('Enter a subject')
    if not request.POST.get('message',''):
    errors.append('Enter a message')
    if request.POST.get('email', '') and '@' not in request.POST['email']:
    errors.append('Enter a valid email address')
    if not errors:
    send_mail(
    request.POST['subject'],
    request.POST['message'],
    request.POST.get('email', 'noreply@example.com'), ['siteownder@example.com'],)
    return HttpResponseRedirect('/contact/thanks/')

    return render_to_response('contact_form.html', { 'errors': errors }, context_instance=RequestContext(request))

    我的问题是这个 View 函数的最后一行。只有在 request.method != POST 时才会调用它。这对我来说似乎完全错误。我不应该在执行 POST 时调用“context_instance=RequestContext(request)”吗?

    最佳答案

    POST 应该用于敏感信息,例如密码,django 需要使用 csrf_token 来保护它; GET 应该用于不需要保护的可添加书签的内容,例如搜索。你做对了。

    编辑

    你不应该打电话 context_instance=RequestContext(request)当它在做 POST ,无论请求类型如何,您都应该调用它。像这样看:

  • POST ?这意味着表单已提交。我们验证表单,如果表单正常,则将用户重定向到另一个页面,或者再次向用户显示表单,但有错误。
  • GET ?这意味着未提交表单,但正在发生其他我们不关心的事情(一些引用链接或其他内容)。无论如何都要显示表格

  • 斜体的操作由最后一次返回完成,与 if 无关。

    关于Django:POST 表单需要 CSRF? GET 没有?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3570289/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com