如何在 django 1.3 中获取 POST 数据

2023-12-31

嘿,我正在按照本教程学习使用 Django 制作 wiki 页面。然而,它是用 django 0.96 制作的,而我使用 Django 1.3,所以有些东西是不同的。有些我已经自己修好了,但是这个我似乎无法让它发挥作用。

我制作了一个将数据提交到视图的表单。 这是形式:

<form method="post" action"/wikicamp/{{page_name}}/save/">{% csrf_token %}
    <textarea name="content" rows="20" cols="60">{{content}}</textarea><br>
    <input type="submit" value="Save Page"/>
</form>

/wikicamp/{{page_name}}/save/ url 重定向到 save_page 视图:

from django.http import HttpResponseRedirect
from django.core.context_processors import csrf

def save_page(request, page_name):
    c = {}
    c.update(csrf(request))
    content = c.POST["content"]
    try:
        page = Page.objects.get(pk=page_name)
        page.content = content
    except Page.DoesNotExist:
        page = Page(name=page_name, content=content)
    page.save()
    return HttpResponseRedirect("wikicamp/" + page_name + "/")

但问题是我收到此错误:

Help

Reason given for failure:

    CSRF token missing or incorrect.


In general, this can occur when there is a genuine Cross Site Request Forgery, or when Django's CSRF mechanism has not been used correctly. For POST forms, you need to ensure:

    The view function uses RequestContext for the template, instead of Context.
    In the template, there is a {% csrf_token %} template tag inside each POST form that targets an internal URL.
    If you are not using CsrfViewMiddleware, then you must use csrf_protect on any views that use the csrf_token template tag, as well as those that accept the POST data.

You're seeing the help section of this page because you have DEBUG = True in your Django settings file. Change that to False, and only the initial error message will be displayed.

You can customize this page using the CSRF_FAILURE_VIEW setting.

所以我阅读了一些文档,比如http://docs.djangoproject.com/en/dev/ref/contrib/csrf/#how-to-use-it http://docs.djangoproject.com/en/dev/ref/contrib/csrf/#how-to-use-it。我尝试这样做,但仍然有同样的错误。

那么:有人知道如何使用 Django 1.3 很好地处理表单发布数据吗?

我认为这与:视图函数使用RequestContext作为模板,而不是Context。但我现在不知道它是什么。

顺便说一句,在我的终端中显示本地主机的 http 请求,它说:模板中使用了 {% csrf_token %},但上下文未提供该值。这通常是由于没有使用 RequestContext 造成的。


您需要在标签之间添加 {% csrf_token %} 模板标签,并包含

   django.middleware.csrf.CsrfViewMiddleware
   django.middleware.csrf.CsrfResponseMiddleware

在应用程序 settings.py 的 MIDDLEWARE_CLASSES 中

添加一些示例后数据处理:

这是我在视图中使用 POST 数据的一次示例。我通常会依靠表单类通过 clean_data 数组进行验证。

if request.method == 'POST':
        form = ForgotPassword(data=request.POST)
        if form.is_valid():
            try:
                new_user = backend.forgot_password(request, **form.cleaned_data)
            except IntegrityError:
                context = {'form':form}
                form._errors[''] = ErrorList(['It appears you have already requested a password reset, please \
                check ' + request.POST['email2'] + ' for the reset link.'])
                return render_template(request,'passwordReset/forgot_password.html',context)
            if success_url is None:
                to, args, kwargs = backend.post_forgot_password(request, new_user)
                return redirect(to, *args, **kwargs)
            else:
                return redirect(success_url)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 django 1.3 中获取 POST 数据 的相关文章

随机推荐

  • 使用 Python 解析 SVG 文件路径

    我正在开发一个机器人项目 从 Android 运行设备拍摄一张照片 然后发送到 cloudconvert org 将其转换为 SVG 然后所有 SVG 路径将被转换为 x y 坐标并串行发送到机器人手臂 机器人手臂将绘制它们笔打开或关闭 所
  • Fancybox 3:单击图像时禁用缩放

    我使用 Fancybox 3 插件设置了一个简单的图像滑块 http fancyapps com fancybox 3 docs http fancyapps com fancybox 3 docs 在 Kirby CMS 中 https
  • R 中 0-1 之间的所有值组合总和为 1

    简单的问题 我试图获得 3 个数字 0 1 到 0 9 之间 的权重之和为 1 的所有组合 例子 c 0 20 0 20 0 60 c 0 35 0 15 0 50 权重相差 0 05 我已经尝试过这个 library gregmisc p
  • 在片段中使用上下文的最佳方式

    我在我的应用程序中使用片段 我创建了一个名为 BaseFragment 的父类 所有其他片段都扩展了此 Basefrgment 下面是此 Basefragment 的片段 基础片段 java public class BaseFragmen
  • 更新 Python Pickle 对象

    我正在做一个机器学习项目 为此我正在使用picklePython 的模块 基本上 我正在解析一个巨大的数据集 这在一次执行中是不可能的 这就是为什么我需要保存分类器对象并在下一次执行中更新它 所以我的问题是 当我使用新数据集再次运行程序时
  • 将观察结果与重叠日期相结合

    我的数据框中的每个观察结果都包含不同的 日期之前 和 日期之后实例 问题是每个 ID 的某些日期重叠 例如 在下表中 ID 1 和 4 包含重叠的日期值 ID before date after date 1 10 1 1996 12 1
  • SimpleCursorAdapter 在 API 版本 15 中已弃用?

    简单光标适配器使用以下注释弃用其构造函数之一 已弃用 不鼓励使用此选项 因为它会导致在应用程序的 UI 线程上执行游标查询 从而导致响应能力差甚至应用程序无响应错误 作为替代方案 将 android app LoaderManager 与
  • AttributeError:“str”对象没有属性“policy”

    我是Python新手 我正在尝试制作一个可以发送电子邮件的电子邮件脚本 首先 我制作了一个没有任何类的 Python 脚本 只是运行以确保脚本按预期运行 当我得到预期的结果后 我正在尝试使用类重写脚本 以便学习 但我收到错误 我不明白 我不
  • 将导航属性映射到主表

    我有课Contract有两个属性TotalAmount and InstallmentAmount public class Contract public int ContractId get set public Amount Tota
  • fork调用后的地址空间

    当进程执行 fork 系统调用时 会生成一个子进程 fork 调用之后的所有代码都被复制到新的内存物理页 即帧 我无法可视化子进程的虚拟内存部分 因为在下面的代码中 char 变量的地址在子进程和父进程中是相同的 include
  • 为什么要使用 Android 服务?

    我想知道当您需要做很多事情只是为了访问任何公共方法或从服务 例如较大的 List 对象 获取大量数据时 使用 Android 服务进行后台工作有什么意义 如果您愿意 为什么不直接使用一个简单的 POJO 它可以在单独的线程中在后台为您执行操
  • 无法解析 rxjava 2 中的 Observable.from 方法

    rxjava 1 中的 Observable 类中有一个 from 方法 但在 rxjava 2 中找不到 如何在以下代码中替换 rxjava 2 中的 from 方法 List
  • 傀儡节点主机名

    我正在使用木偶来配置服务器 我想在 erb 模板中打印当前机器 节点 名称 有hostname变量 但这包含 puppetmaster 主机名 关于这个主题有什么好的参考 列表吗 好像我错过了什么地方 我只需在 erb 模板中调用以下代码即
  • 在 Django 的 ORM 中访问存储过程的最佳方式是什么

    我正在设计一个相当复杂的数据库 并且知道我的一些查询将远远超出 Django ORM 的范围 有人成功地将 SP 与 Django 的 ORM 集成吗 如果是这样 什么 RDBMS 以及您是如何做到的 我们 musicpictures co
  • iPhone 版 Mapsforge 模拟

    我的 iPhone 应用程序需要一些框架 该应用程序使用地图 现在这些地图是光栅图像 我想通过制作矢量地图来优化我的应用程序 我知道我的 Android 开发同事已经使用 Mapsforge 框架来实现此目的 iPhone 上有类似的库吗
  • 为什么我们在查找素数时可以使用 sqrt(n) 而不是 n/2 作为上限? [复制]

    这个问题在这里已经有答案了 我们如何使用sqrt n 代替n 2在这段代码中 使用是否正确sqrt n static boolean isPrime long n if n lt 1 return false double limit Ma
  • 使用curses.h从键盘获取字符

    我正在尝试使用curses h 从键盘获取一个字符 这是我的来源 get char example c include
  • 为什么位域的类型会影响包含结构的大小?

    首先 这是 ISO C 标准关于位字段的规定 引用了N1570 http www open std org jtc1 sc22 wg14 www docs n1570 pdf2011 年 ISO C 标准草案 第 6 7 2 1 节 位字段
  • 为什么允许“src”属性链接到来自外部域的脚本,而 XmlHtppRequests 则不允许?

    我已经阅读了 StackOverflow 上有关同源策略的几个答案 但我似乎没有抓住本质部分 在所有使用的标签中src属性 比如
  • 如何在 django 1.3 中获取 POST 数据

    嘿 我正在按照本教程学习使用 Django 制作 wiki 页面 然而 它是用 django 0 96 制作的 而我使用 Django 1 3 所以有些东西是不同的 有些我已经自己修好了 但是这个我似乎无法让它发挥作用 我制作了一个将数据提