csrf相关装饰器auth认证模块

csrf相关装饰器

# 在后端视图层可以加装饰器实现开启,关闭csrf校验
from django.views.decorators.csrf import csrf_exempt,csrf_protect

"""
csrf_exempt 
    忽略csrf校验
csrf_protect
    开启csrf校验
"""

# 针对FBV
@csrf_protect\@csrf_exempt
def login(request):
    return render(request,'login.html')

# 针对CBV
csrf_protect 三种CBV添加装饰器的方式都可以
csrf_exempt  只有一种方式可以生效(给重写的dispatch方法装)

基于中间件思想编写项目

# 通过字符串形式导入模块
	importlib模块
    eg:
        import importlib
        res = 'test'
        ret = importlib.import_module(res)
        print(ret)
        '''导入的最小单位是py文件'''

  
'''以发送提示信息为需求 编写功能'''
方式1:封装成函数
方式2:封装成配置

### settings.py
NOTIFY_FUNC_LIST = [
    'notify.email.Email',
    'notify.msg.Msg',
    'notify.qq.QQ',
    'notify.weixin.WeiXin'
]

### email.py 
class Email(object):
    def __init__(self):
        pass  # 模拟发送邮件需要提前准备好的操作
    def send(self,msg):  # 使用多态
        print('邮箱提醒:%s'%msg)

### __init__.py
    import settings
    import importlib
  # 1.循环获取配置文件中字符串信息
    for str_path in settings.NOTIFY_FUNC_LIST:  # 'notify.email.Email'
        # 2.切割路径信息
        module_path, class_str_name = str_path.rsplit('.', maxsplit=1)  # ['notify.email','Email']
        # 3.根据module_path导入模块文件
        module = importlib.import_module(module_path)
        # 4.利用反射获取模块文件中对应的类名
        class_name = getattr(module, class_str_name)  # Email  Msg  QQ
        # 5.实例化
        obj = class_name()
        # 6.调用发送消息的功能
        obj.send(msg)

'''
    # 1.获取配置信息
    for i in settings.MODEL_URLS:
        # 2.地址拆分
        model_path,class_name = i.rsplit('.')
        # 3.导入模块
        res = importlib.import_module(model_path)
        # 4.利用反射获取类
        class_name_str = getattr(res,class_name)
        # 5.实例化对象
        obj = class_name_str()
        # 6.调用函数
        obj.send(f'{class_name}:你好啊')
'''

auth认证模块


# django提供给你快速完成用户相关功能的模块
	用户相关功能:创建、认证、编辑...
# django也配套提供了一张'用户表'
	执行数据库迁移命令之后默认产生的auth_user
# django自带的admin后台管理用户登录参考的就是auth_user表
	创建admin后台管理员用户:run manage.py task>>:createsuperuser
  自动对用户密码进行加密处理并保存

auth模块方法大全

from django.contrib import auth
# 1.验证用户名和密码是否正确
	auth.authenticate()  
    '''校验正确返回用户对象,错误返回None'''
# 2.保存用户登录状态
	auth.login()
    '''自动记录session'''
# 3.获取当前用户对象
	request.user
    '''
    如果有用户登录返回用户对象
    没有登录返回AnonymousUser
    '''
# 4.判断当前用户是否登录
	request.user.is_authenticated()
    '''登录返回Ture,没登录返回False'''
# 5.校验登录装饰器
	from django.contrib.auth.decorators import login_required
    '''没有用户登录默认跳转到/accounts/login/页面,也可以自己定义'''
    # 局部配置
	@login_required(login_url='/login/')  
    # 全局配置
	@login_required  
	LOGIN_URL = '/login/'  # 需要在配置文件中添加配置
    
# 6.修改密码
	request.user.check_password()  # 比较原密码是否正确,自动加密再比较 
  request.user.set_password()  # 修改密码
  request.user.save()  # 保存数据
# 7.注销登录
	auth.logout(request)  # session失效
# 8.注册用户
	from django.contrib.auth.models import User
  User.objects.create_superuser()  # 注册超级管理员
  User.objects.create_user()  # 注册普通用户

auth扩展表字段

# 方式1:编写一对一表关系(了解)
# 方式2:类继承(推荐)
from django.contrib.auth.models import AbstractUser
class Users(AbstractUser):
    # 编写AbstractUser类中没有的字段 不能冲突!!!
    phone = models.BigIntegerField()
    addr = models.CharField(max_length=32)

AUTH_USER_MODEL = 'app01.Users'
"""
1.类继承之后 需要重新执行数据库迁移命令 并且库里面是第一次操作才可以
2.auth模块所有的方法都可以直接在自定义模型类上面使用
	自动切换参照表
"""

posted @ 2022-05-25 21:49  Yietong  阅读(26)  评论(0)    收藏  举报