我试图在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)
我是否必须传递更多参数。,这个错误我在启动应用程序时遇到“发生服务器错误。请联系管理员。”
请解释出了什么问题?
答案 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)