Django CSRF验证失败。请求中止

编程入门 行业动态 更新时间:2024-10-23 20:21:17
本文介绍了Django CSRF验证失败。请求中止的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我正在构建这个维基帖子,当我尝试保存数据时遇到错误。 我目前使用的是django 1.4.3,我使用的教程很旧。所以我不认为CSRF被包含在旧版本中。

I'm building this wiki post and I encountered an error when ever I try to save data. I'm using django 1.4.3 at the moment and the tutorial i'm using is pretty old. So I don't think CSRF was included in the older version.

Forbidden (403) CSRF verification failed. Request aborted. 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: Your browser is accepting cookies. 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.

我认为问题出现在我的模板中,但我会列出我的views.py

I think the problem is in my templates but I'll list my views.py anyway

我的观点是:

from wiki.models import Page from django.shortcuts import render_to_response from django.http import HttpResponseRedirect def view_page(request,page_name): try: page = Page.objects.get(pk=page_name) except Page.DoesNotExist: return render_to_response("create.html",{"page_name":page_name}) content = page.content return render_to_response("view.html",{"page_name":page_name , "content":content}) def edit_page(request,page_name): try: page = Page.objects.get(pk=page_name) content = page.content except Page.DoesNotExist: content = "" return render_to_response("edit.html",{"page_name":page_name, "content":content}) def save_page(request , page_name): content = request.POST.get('content', 'this is the default') 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 + "/")

我的create.html

My create.html

<html> <head> <title>{{page.name}} - Create </title> </head> <body> <h1>{{page_name}} </h1> This page does not exist. <a href="/wikicamp/{{page_name}}/edit/">Create? </a> </body> </html>

我的edit.html,我在里面添加了{%csrf_token%},但似乎失败了。 p>

My edit.html , I added the {% csrf_token %} inside but seem to fail.

<html> <head> <title>{{page_name - Editing</title> </head> <body> <h1>Editing {{page_name}} </h1> <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> </body> </html>

我的views.py模板

My views.py template

<html> <head> <title>{{page_name}}</title> </head> <body> <h1>{{page_name}} </h1> {{content}} <hr/> <a href="/wikicamp/{{page_name}}/edit/">Edit this page ?</a> </body> </html>

我的URLconf:

from django.conf.urls import patterns, include, url from django.contrib import admin from django.conf import settings admin.autodiscover() urlpatterns = patterns('', url(r'^admin/', include(admin.site.urls)), url(r'^wikicamp/(?P<page_name>[^/]+)/edit/$','wiki.views.edit_page'), url(r'^wikicamp/(?P<page_name>[^/]+)/save/$','wiki.views.save_page'), url(r'^wikicamp/(?P<page_name>[^/]+)/$','wiki.views.view_page'), )

如何解决这个问题?

推荐答案

将context_instance = RequestContext(请求)添加到您将使用其中的表单的每个视图:看起来你没有传递上下文处理器

Add context_instance=RequestContext(request) to every view that you will use a form inside it: It seems you are not passing the context processor

from wiki.models import Page from django.shortcuts import render_to_response from django.http import HttpResponseRedirect def view_page(request,page_name): try: page = Page.objects.get(pk=page_name) except Page.DoesNotExist: return render_to_response("create.html",{"page_name":page_name}) content = page.content return render_to_response("view.html",{"page_name":page_name , "content":content}, context_instance=RequestContext(request)) def edit_page(request,page_name): try: page = Page.objects.get(pk=page_name) content = page.content except Page.DoesNotExist: content = "" return render_to_response("edit.html",{"page_name":page_name, "content":content}, context_instance=RequestContext(request)) def save_page(request , page_name): content = request.POST.get('content', 'this is the default') 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 + "/")

尝试这个。

仍然你得到的问题,请张贴urls .py还

Still you are getting the problem please post the urls .py also

更多推荐

Django CSRF验证失败。请求中止

本文发布于:2023-10-18 13:13:13,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1504324.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:Django   CSRF

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!