day76
一.上节回顾
# 0 中间件:概念很大,介于某两个东西之间
-服务器中间件
-数据库中间件
-消息队列中间件
#1 django中间件(全局请求和响应的处理)
-写一个类,继承一个类,把类配置在setting中,先后顺序
-process_request:所有请求来了,都会走它(尽量加判断),如果返回HttpResponse对象,不再继续往下走
-process_response:所有请求走,都会经过它,加入响应头,设置cookie,session
-process_view:process_request和路由匹配成功,视图函数执行之前
-process_exception:视图函数出异常,会执行它
# csrf:跨站请求伪造(浏览器的漏洞)
-方案:每次发请求,都携带一个服务端给我的随机字符串(放在头,放在体中)
-django处理csrf攻击,放在头或者数据中都可以,这个随机字符串是后端给的(cookie中取,页面中隐藏的,标签渲染上的)
-csrf全局使用,局部禁用
-csrf全局禁用,局部使用
-cbv加装饰器
二.今日内容
1.auth组件介绍
1 我们需要实现包括用户注册,用户登录,用户认证,注销,修改密码等功能,内置了强大的用户认证系统--auth,是一个app
2.内置属性 方法
数据迁移以后使用
authenticate用户认证
from django.contrib import auth
def login(request):
if request.method == 'GET':
return render(request,'login.html')
else:
name=request.POST.get('name')
password=request.POST.get('password') # 明文
## 方案行不通,密码是密文的,永远匹配不成功
# user=User.objects.filter(username=name,password=password)
## 使用此方案
## 第一个参数必须是request对象
## username和password
user=auth.authenticate(request,username=name,password=password)
if user:
return HttpResponse('登录成功')
else:
return HttpResponse('用户名或密码错误')
login
# 表示用户登录了
# 1 存了session
# 2 以后所有的视图函数,都可以使用request.user,它就是当前登录用户
auth.login(request,user)
logout
def logout(request):
# 后续再访问视图函数,就没有当前登录用户了request.user(匿名用户AnonymousUser)
auth.logout(request)
return redirect('/index/')
is_authenticated
# is_authenticated 返回True或者False,判断用户是否登录
# 用在视图中
if request.user.is_authenticated:
print(