1

我试图让 POST 方法在 Python DJango 中工作。但无法成功实施 CSRF。

这是我在 Views.py 中的内容

def showTime(request):      
    t = get_template('FR/current_datetime.html')
    htmlContent = t.render(Context({"day_list": ['wednesday','thursday','friday'] , "current_date": datetime.datetime.now()} ))
    return HttpResponse(htmlContent)

def showWeekEnd(request):           
   c = {}
   c.update(csrf(request))
   if request.method == 'POST':
       return render_to_response('EN/current_datetime.html', c)

我的 URL 模式是

url(r'^showTime/$', showTime),
    url(r'^$', showTime),
    url(r'^showWeekEnd/$', showWeekEnd),

我也启用了

MIDDLEWARE_CLASSES = (
    'django.middleware.csrf.CsrfViewMiddleware',
)

我有(EN/current_datetime.html)

<form action="/showWeekEnd/" method="post">{% csrf_token %} 

为此我得到

TypeError: csrf() takes exactly 1 argument (0 given)

如果我必须传递更多参数。当我启动应用程序本身时出现此错误,并显示“发生服务器错误。请联系管理员。”

请解释发生了什么问题?

4

3 回答 3

1
from django.shortcuts import render
import datetime

def showWeekEnd(request):           
   if request.method == 'POST':
       return render(request, 'EN/current_datetime.html')

def showTime(request):      
    c = {}
    c["day_list"] = ['wednesday','thursday','friday']
    c["current_date"] = datetime.datetime.now()
    return render(request, 'FR/current_datetime.html', c)
于 2013-08-01T11:22:44.340 回答
1

您是否尝试在您的 render_to_response 添加 RequestContext(request) ?

视图.py

from django.template import RequestContext

return render_to_response('EN/current_datetime.html', c, RequestContext(request))
于 2013-08-01T10:40:15.580 回答
0

做这个:

#settings.py
TEMPLATE_CONTEXT_PROCESSORS = (
    ...,
    'django.core.context_processors.csrf',)

在您看来,使用 csrf 装饰器而不是手动添加它。

from django.views.decorators.csrf import csrf_protect
from django.template import RequestContext

@csrf_protect
def showWeekEnd(request):
    c = RequestContext(request)
    return render_to_response('EN/current_datetime.html', c)
于 2013-08-01T11:31:41.677 回答