Django框架12

基于中间件思想编写项目

复制代码
# importlib模块
# 可以通过字符串的形式导入模块
# 常规导入方式
from ccc import b
print(b)  
<module 'ccc.b' from '/Users/jiboyuan/PycharmProjects/day61_1/ccc/b.py'>
print(b.name)
# 字符串导入方式
import importlib
module_path = 'ccc.b'
res = importlib.import_module(module_path)
print(res.name)

from ccc.b import name  # 可以直接导变量数据
import importlib
module_path = 'ccc.b.name'
importlib.import_module(module_path)  # 不可以 最小导入单位是模块文件级别
复制代码
复制代码
'''以发送提示信息为需求 编写功能'''
方式1:封装成函数
方式2:封装成配置
import settings
import importlib
def send_all(msg):
    # 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)
复制代码

auth认证模块

auth认证模块简介:

Auth模块是Django自带的用户认证模块:

在开发网站的时候,无可避免的需要设计实现网站的用户系统。此时我们需要实现包括用户注册、用户登录、用户认证、注销、修改密码、校验、验证用户是否登录等功能。

Django作为一个完美主义者的终极框架,它内置了强大的用户认证系统auth模块,它默认使用 auth_user 表来存储用户数据。

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

auth认证模块基本方法:

# 模块导入
from django.contrib import auth
复制代码
'''
基本方法:
# 1.验证用户名和密码是否正确
    auth.authenticate()
# 2.保存用户登录状态
    auth.login()
# 3.获取当前用户对象
    request.user
# 4.判断当前用户是否登录
    request.user.is_authenticated()
# 5.校验登录装饰器
    from django.contrib.auth.decorators import login_required
    @login_required(login_url='/lg/')  # 局部配置
    @login_required  # 全局配置
    LOGIN_URL = '/lg/'  # 需要在配置文件中添加配置
# 6.修改密码
    request.user.check_password() 
  
  request.user.set_password()
  request.user.save()
# 7.注销登录
    auth.logout(request)
# 8.注册用户
    from django.contrib.auth.models import User
  User.objects.create_superuser()
  User.objects.create_suser()
'''
复制代码

auth扩展表字段

auth内置的认证系统这么好用,但是auth_user表字段都是固定的那几个,在项目中可能没法拿来直接使用。

这时候有两种方式:

方式1:

编写一对一的表关系,新建另外一张表然后通过一对一和内置的auth_user表关联。

方式2:类继承(推荐)

我们可以通过继承内置的 AbstractUser 类,来定义一个自己的Model类。这样既能根据项目需求灵活的设计用户表,又能使用Django强大的认证系统了。

复制代码
'''
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'
'''
复制代码

ps:

如果继承了AbstractUser,那么执行数据库迁移命令时,auth_user就不会被创建出来了,而users表中会出现auth_user表中的所有字段外加扩展字段。

前提:

  • 继承之前没有执行过数据库迁移命令,auth_user没有被创建,如果当前库被创建了,重新换一个库。
  • 类继承之后,需要重新执行数据库迁移命令,并且库里面是第一次操作才可以;继承的类里面不要覆盖AbstractUser里面的字段。
  • auth模块所有的方法都可以直接在自定义模型类上面使用。
  • 需要在配置文件当中告诉Django要用users替换auth_user》》》:
    AUTH_USER_MODEL = 'app01.Users'
posted @   *sunflower*  阅读(61)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示