django_auth认证模块

一.csrf装饰器补充

from django.views.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,'home.heml')
'忽略启动都可选'
# 2.针对CBV
csrf_exempt  忽略csrf效验(三种CBV添加装饰器的方式都可用)
csrf_protect 启动csrf效验(只有重写的dispatch方法加装可用)

二.基于中间件项目编写

import importlib 模块

importlib模块可以通过字符串的形式导入模块
# 1.常规导入
 from 文件夹a import py文件c
通过c.name 可以获取a文件夹中py文件c的变量名name对应的值
# 2.字符串导入方式
import importlib
my_mod = 'a.c'
res = importlib.import_module(my_mod)
已发送消息为需求 功能编写
# 1.封装成函数 
通过from获取文件名 进行传值
# 2.封装成函数
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)
      7.通过启动文件传值
    if __name__ == '__main__':
    c.send_all('吃肉')


**内部包含 包(内涵类.双下init文件) settings配置文件 启动脚本文件 **

三.auth认证模式

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

四.anth模块的方法

from django.contrib import auth   # anth模块
from django.contrib.auth.decorators import login_required #anth 装饰器
from django.contrib.auth.models import User # django自带表

# 1.注册功能
from django.contrib.auth.models import User
def register(request):

User.objects.create_superuser(username='admin',password='ttqw123',email='123@qq.com')
#  User.objects.create_superuser   注册管理员
#  User.objects.create_suser       注册游客

# 2.登陆功能
from django.contrib import auth
def lg(request):
    if request.method == 'POST':
        name = request.POST.get('name')
        pwd = request.POST.get('pwd')
        is_user_obj = auth.authenticate(request,name=name,pwd=pwd)
        print(is_user_obj)
        if is_user_obj:
            auth.login(request,is_user_obj)
    return render(request,'lg.html')

# auth.authenticate      验证用户名与密码 将密码改为密文
# auth.login             保存登陆状态

# 3.查看是否登陆
@login_required          # 登陆装饰器
def get_user(request):
    print(request.user.is_authenticated())
    return HttpResponse('返回布尔值')
# request.user                    获取登陆对象
# request.user.is_authenticated   判断是否登陆成功

# 4.装饰器
from django.contrib.auth.decorators import login_required
@login_required(login_url='/lg/')  # 局部设置
@login_required                    # 全局设置
全局设置需要在配置文件中加一个条件
LOGIN_URL = '/lg/'                # 未登陆 lg返回登陆界面

# 5.修改密码
@login_required
def get_pwd(request):
    if request.method == 'POST':
        pwd = request.POST.get('pwd')
        pwd_tu = request.POST.get('pwd_tu')
        is_pwd = request.user.check_password(pwd)
        if is_pwd:
            request.user.set_password(pwd_tu)
            request.user.save()
    return render(request,'pwd.html',locals())


# request.user.check_password   效验密码是否正确
# request.user.set_password     修改原密码
# request.user.save             保存

"""
前端from表单
{% csrf_token %}
"""

五.auth扩展字段

推荐采用类的继承方式
from django.contrib.auth.models import AbstractUser 模块
class Users(AbstractUser):
    pjhone = models.BigIntegerField()
    addr = models.CharField(max_length=64)
扩展字段时 字段名不能冲突
并要在配置文件中加入文件名与类名
AUTH_USER_MODEL = 'app01.Users'
"""
错误提示信息
1.类继承之后 需要重新执行数据库迁移命令 并且库里面是第一次操作才可以
2.auth模块所有的方法都可以直接在自定义模型类上面使用自动切换参照表
"""
posted @ 2022-05-25 22:49  笑舞狂歌  阅读(40)  评论(0编辑  收藏  举报