Pease help在django 1.11中使用csrf标记
在view.py中的我使用以下代码:
from django.shortcuts import render_to_response, redirect
from django.contrib import auth
from django.views.decorators.csrf import csrf
def login(request):
args = {}
args.update(csrf(request))
if request.POST:
username = request.POST.get('username', '')
password = request.POST.get('password', '')
user = auth.authenticate(username=username, password=password)
if user is not None:
auth.login(request, user)
return redirect('/')
else:
args['login_error'] = 'Пользователь не найден';
return render_to_response('login.html', args)
else:
return render_to_response('login.html', args)
但是控制台显示会出现以下错误消息:
文件“/home/kalinin/django/login/views.py”,第3行,来自 django.views.decorators.csrf import csrf ImportError:无法导入 名称'csrf'
在django 1.8中我使用类似的代码,但导入csrf:
from django.core.context_processors import csrf
并且应用程序正常运行
请帮助我运行django 1.11的应用程序
答案 0 :(得分:6)
在Django 1.8中,模板上下文处理器已移至django.template.context_processors.csrf
,因此导入将为:
from django.template.context_processors import csrf
但是,您根本不需要导入它。停止使用render_to_response
,它已经过时了。请改用render
快捷方式。
from django.shortcuts import render
return render(request, 'login.html', args)
当您使用render
快捷方式时,您无需担心视图中的csrf
令牌,您可以删除此行。
args.update(csrf(request))