django auth模块
csrf相关装饰器
from django.views.decorators.csrf import csrf_exempt,csrf_protect
忽略csrf校验
开启csrf校验
@csrf_protect\@csrf_exempt
def login(request):
return render(request,'login.html')
csrf_protect 三种CBV添加装饰器的方式都可以
csrf_exempt 只有一种方式可以生效(给重写的dispatch方法装)
字符串形式导入模块
import importlib
可以通过字符串的形式导入模块
from ccc import b
import importlib
module_path = 'ccc.b'
res = importlib.import_module(module_path)
'最小导入单位是模块文件级别'
功能的插拔式设计
方式1:封装成函数
方式2:封装成配置
NOTIFY_FUNC_LIST = [
'notify.email.Email',
'notify.msg.Msg',
]
class Email(object):
def __init__(self):
pass
def send(self,msg):
print('短信提示:%s'%msg)
import settings
import importlib
def send_all(msg):
for str_path in settings.NOTIFY_FUNC_LIST:
module_path, class_str_name = str_path.rsplit('.', maxsplit=1)
module = importlib.import_module(module_path)
class_name = getattr(module, class_str_name)
obj = class_name()
obj.send(msg)

auth模块
用户相关功能:创建、认证、编辑...用户相关操作
执行数据库迁移命令之后默认产生的auth_user
创建admin后台管理员用户:
run manage.py task>>:createsuperuser
python3 manage.py createsuperuser
自动对用户密码进行加密处理并保存
'''django在启动之后就可以直接访问admin路由,需要输入用户名和密码,数据参考的就是auth_user表,并且还必须是管理员用户才能进入'''
auth模块方法
比对用户名和密码是否正确
'比对用户名和密码是否正确'
from django.contrib import auth
user_obj = auth.authenticate(request,username=username,password=password)
print(user_obj)
print(user_obj.username)
print(user_obj.password)
保存用户状态
'保存用户状态 自动操作sesson相关'
auth.login(request,user_obj)
'''执行了该方法 你就可以在任何地方通过request.user获取到当前登陆的用户对象'''
print(request.user)
'''
没登陆拿到的是匿名用户 AnonymousUser
自动去django_session里面查找对应的用户对象给你封装到request.user
'''
print(request.user.is_authenticated())
'''
返回True 则说明用户登录
返回False 则说明用户未登录
'''
校验登录装饰器
from django.contrib.auth.decorators import login_required
@login_required(login_url='/lg/')
LOGIN_URL = '/lg/'
@login_required
'''
全局的好处在于无需重复写代码 但是跳转的页面却很单一
局部的好处在于不同的视图函数在用户没有登陆的情况下可以跳转到不同的页面
'''
修改密码
check_password 原密码
is_right = request.user.check_password(old_password)
'自动加密比对密码'
if is_right:
request.user.set_password(new_password)
request.user.save()
注销功能
auth.logout(request)
注册功能
1.操作auth_user表写入数据
User.objects.create(username=username,password=password)
'不能用create 密码没有加密处理'
2.创建普通用户
User.objects.create_user(username=username,password=password)
3.创建管理员:
'使用代码创建管理员 邮箱是必填的 而用命令创建则可以不填'
User.objects.create_superuser(username=username,email='123@qq.com',password=password)
auth扩展表字段
1.在继承之前没有执行过数据库迁移命令(auth_user没有被创建)
如果当前库已经创建了,那么你就重新换一个库
2.继承的类里面不要覆盖AbstractUser里面原有的字段名
表里面有的字段都不要动,只扩展额外字段即可
3.需要在配置文件中告诉Django你要用MyUser替代auth_user
AUTH_USER_MODEL = 'app01.MyUser'
from django.contrib.auth.models import AbstractUser
class Users(AbstractUser):
phone = models.BigIntegerField(null=True)
addr = models.CharField(max_length=32)
AUTH_USER_MODEL ='app01.MyUser'
优化处理
'对模型表进行配置'
class UserInfo(AbstractUser):
mobile = models.CharField(max_length=11, unique=True)
class Meta:
db_table = 'user'
verbose_name_plural = '系统用户表'
def __str__(self):
return self.username
'''admin.py'''
from django.contrib import admin
from app01 import models
admin.site.register(models.UserInfo)
admin.site.register(models.Blog)
admin.site.register(models.Article)
admin.site.register(models.Tag)
admin.site.register(models.Category)
admin.site.register(models.Article_Tag)
admin.site.register(models.Comment)
admin.site.register(models.UpAndDown)
from django.contrib.auth.admin import UserAdmin
class UserInfo(UserAdmin):
add_fieldsets = (
(None, {
'classes': ('wide',),
'fields': ('username', 'password1', 'password2', 'mobile', 'email', 'is_staff', 'is_active'),
}),
)
list_display = ('username', 'mobile', 'email', 'is_staff', 'is_active')
admin.site.register(models.UserInfo, UserInfo)

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统