当前位置: 首页 > 面试题库 >

Django:CSRF令牌丢失或不正确

杜轩昂
2023-03-14
问题内容

我有Django的1.3版。我尝试按照其他人的问题指定localhost:8000,但这对我不起作用。我正在尝试使用文件上传表单,但是我收到一个错误,即form.py没有CSRF令牌。

form.py:

class UploadFileForm(forms.Form):

    title = forms.CharField(max_length=50)
    file  = forms.FileField()

views.py:

def upload_file(request):

    c = {}
    c.update(csrf(request))

    if (not request.user.is_authenticated()) or (request.user == None):
      return HttpResponseRedirect("/?error=11")


    if request.method == 'POST':
      form = c['UploadFileForm'] = UploadFileForm(request.POST, request.FILES,  c, context_instance=RequestContext(request))

      if c['UploadFileForm'].is_valid():
        handle_uploaded_file(request.FILES['file'])
        return HttpResponseRedirect('/success/url/')

    else:
        form = c['UploadFileForm'] = UploadFileForm()
    return render_to_response('fileupload/upload.html', {'form': c['UploadFileForm']})

upload.html:

{% block main_content %}


  <form action="fileupload/form.py" enctype="multipart/form-data" method="POST">
    {% csrf_token %}
    <table>

      <tr><td>Title:</td><td><input type="text" name="title" /></td></tr>
      <tr><td>File:</td><td><input type="file" name="file" /></td></tr>
    </table>
      <input type="submit" value="Submit" class = "float_right button_input" />

  </form> 

{% endblock main_content %}

我很沮丧,请告诉我一些尝试的方法。谢谢


问题答案:

你需要传递RequestContextrender_to_responsecsrf_token

为此:(views.py)

from django.template import RequestContext

...

return render_to_response('fileupload/upload.html', {'form': c['UploadFileForm']},  RequestContext(request))
# Added RequestContext

这会将csrf的令牌传递到模板。



 类似资料:
  • 问题内容: 在这里是Django的初学者,我已经尝试了很长时间了。我的中间件类中确实有“ django.middleware.csrf.CsrfViewMiddleware”,并且我的帖子中确实有令牌。 这是我的代码,我在做什么错? 这是我的模板: 问题答案: 你应该使用自动使用的快捷功能 使用https://docs.djangoproject.com/en/2.2/topics/http/sh

  • 问题内容: 我正在使用Django 1.7和django-rest-framework。 我制作了一个API,该API返回了一些JSON数据,并将其放入了我的 settings.py 当我进行GET调用时,它将返回我所有的数据,但是当我尝试使用PUT / PATCH时,我得到: 仅当我登录时才会发生这种情况,如果我是匿名用户,则可以正确进行PUT / PATCH。 我尝试过,但遇到错误,我将设置包

  • 问题内容: 我尝试发布参数像 但是, 我正在使用Django返回,找不到在不影响安全性的情况下如何防止此问题。 问题答案: 你可以通过两种不同的方式发出AJAX发布请求: 告诉你的视图不要检查csrf令牌。这可以通过使用decorator来完成,如下所示: 要将csrf令牌嵌入每个AJAX请求中,对于jQuery,它可能是: 该getCookie函数从cookie检索csrf令牌的位置。我使用以下

  • 问题内容: 希望有人向我展示如何使用Django REST框架使用JSON发出简单的POST请求。我在本教程中的任何地方都看不到任何示例吗? 这是我要发布的角色模型对象。这是一个全新的角色,我想添加到数据库中,但出现500错误。 这是我在bash终端提示符下的curl请求: 网址 DOES可以处理GET请求,并且我可以下拉数据库中的所有角色,但是似乎无法创建任何新的Roles。我没有权限设置。我在

  • 我在Note.js项目中完美地使用了azure API。 登录: 最后一行抛出错误: 访问令牌丢失或格式错误

  • 我试图在TestRig中运行以下语法: 使用以下输入: 显然,第三行输入(“fd fd01”)缺少在规则中要求的结束符。 旁注1:如果我启用了IS EXTERNAL或IS GLOBAL子句,但不是两个子句都启用,那么可以很好地工作,并注入丢失的令牌。 附带说明2:为启用两个子句的语法生成的代码有以下额外代码(与只启用其中一个子句的语法相比): 而调用是罪魁祸首,因为它在解析器有机会进行之前,在输入