Django Form Post

时间:2013-08-01 10:20:24

标签: python django

我试图在Python DJango中使用POST方法。但是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(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)

我是否必须传递更多参数。,这个错误我在启动应用程序时遇到“发生服务器错误。请联系管理员。”

请解释出了什么问题?

3 个答案:

答案 0 :(得分:1)

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

views.py

from django.template import RequestContext

return render_to_response('EN/current_datetime.html', c, RequestContext(request))

答案 1 :(得分: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)

答案 2 :(得分: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)