中间件编程思想以及auth认证模块
一 csrf相关装饰器
# 1.方法介绍
from django.veiws.decorators.csrf import csrf_exempt,csrf_protect
csrf_exempt # 忽略csrf校验
csrf_protect # 开启csrf校验
# 1.FBV装饰
@csrf_protect\@csrf_exempt
def login(request):
return render(request,'login.html')
# 2.CBV装饰
csrf_protect # 三种添加方式都可以生效
csrf_exempt # 只针对重写dispatch方法生效
二 基于中间件编程
1.importlib # 可以以字符串的形式导入模块,最小单位是文件
2.使用方式:
import importlib
moudel_path='模块所在路径'
importlib.import_modele(model_path) # 即可导入成功
3.中间件编程思想
第一通过启动文件调用包文件包内封装了多个模块,只需要在双下init内编写拿到各个类的对象直接就能启动
# 双下init文件内
from src import settings
import importlib
def send_all():
# 1.拿到配置文件内的字符串
for path_str in settings.CLASS_FUNC_LIST:
# 2.切割拿到字符串的模块路径,字符串的类名
model_str_path,class_str_name=path_str.rsplit
('.',maxsplit=1)
# 3.利用importlib导入模块
model_name=importlib.import_module(model_str_path)
# 4.通过字符串类名获取模块内的类名
class_name=getattr(model_name,class_str_name)
# 5.拿到类名之后产生对象
obj=class_name()
# 6.鸭子类型触发类中方法也可以触发多个方法
obj.send()
# settings文件
CLASS_FUNC_LIST=[
'my_models.class1.Test1',
'my_models.class2.Test2',
'my_models.class3.Test3',
]
# 实现了通过注册或注释setings的字符串路径来触发相同的方法
三 auth认证模块
# 1.django自带的快速认证用户相关功能的模块
1.用户的创建,认证,编辑
2.django在首次进行迁移命令是会自动产生auth_user表
3.创建管理员用户的命令在run manage.py内执行
cretaesuperuser
4.自动会对密码进行加密再保存
四 auth模块方法
from django.contrib import auth
1.auth.authenticate() # 验证用户名和密码是否正确
2.auth.login() # 保存用户登录状态
3.request.user # 获取当前用户对象
4.request.user.is_authenticated() # 判断当前用户是否登录
from django.contrib.auth.decorators import login_required
5.@login_required(login_url='跳转页面路由')# 数据局部配置
6.@login_required #装在需要装饰的视图函数上
在settings内配置LOGIN_URL='跳转的路由'
7.request.user.check_password() # 验证密码是否一致
request.user.set_password() # 修改密码
request.user.save() # 将修改的数据同步到数据库内
8.auth.logout(request) # 退出登录会自动删除session
from django.contrib.auth.models import User
User.objects.create_suoeruser() # 创建管理员用户
User.objects.create_user() # 创建普通用户
五 auth扩展字段
# 1.方式一:编写一对一表关系(一般不用)
# 2.方式二:类继承(一般使用方式)
eg:
from django.contrib.auth.models import AbstractUser
class MyUsers(AbstractUser):
# 自定义的额外字段不能与已存在的字段重复
pohne=models.BigIntegerField()
addr=models.CharField(max_length=32)
# 针对于自定义了自己的表要先向settings声明
添加配置AUTH_USER_MODEL='app01.MyUsers'
# 该配置只能在数据库还未进行数据库迁移才有效不然会报错
# 该表也继承了自带表的方法
六 bbs数据表分析
# 1.分析博客园内需要用到的表
1.用户表==>继承AbstractUser
2.个人站点表==>站点名称,标题,样式
3.文章表==>标题,简介,内容,发布时间
4.文章分类表==>分类名称
5.文章标签表==>标签名称
6.文章点赞点踩表==>文章,用户,赞/踩
7.文章评论表==>文章,用户,评论内容,评论时间
# 2.分析表内关系
用户表与个人站点表应该为一对一关系
用户表与文章表关系应该为一对多
文章表与文章分类表关系应为一对多
文章表与标签表关系应该为多对多
文章表与点赞点踩表关系应为一对一
文章表与文章评论表关系应为一对多