如何在django 1.11中导入和使用csrf标记?

时间:2017-07-12 10:09:01

标签: python django

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的应用程序

1 个答案:

答案 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))