模仿django中间件编程以及auth模块的认证

中间件编程思想以及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.分析表内关系
  用户表与个人站点表应该为一对一关系
  用户表与文章表关系应该为一对多
  文章表与文章分类表关系应为一对多
  文章表与标签表关系应该为多对多
  文章表与点赞点踩表关系应为一对一
  文章表与文章评论表关系应为一对多

posted on 2022-05-25 18:57  淦白嫖怪  阅读(44)  评论(2)    收藏  举报

导航