Django day12
作者:互联网
目录
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模块
可以通过字符串的形式导入模块
# 常规导入方式
from ccc import b
print(b) # <module 'ccc.b' from '/Users/jiboyuan/PycharmProjects/day61_1/ccc/b.py'>
print(b.name)
from ccc.b import name # 可以直接导变量数据
# 字符串导入方式
import importlib
module_path = 'ccc.b'
res = importlib.import_module(module_path)
print(res.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认证模块
# django提供给你快速完成用户相关功能的模块
用户相关功能:创建、认证、编辑...
# django也配套提供了一张'用户表'
执行数据库迁移命令之后默认产生的auth_user
# django自带的admin后台管理用户登录参考的就是auth_user表
创建admin后台管理员用户:run manage.py task>>:createsuperuser
自动对用户密码进行加密处理并保存
auth模块方法大全
from django.contrib import auth
1.验证用户名和密码是否正确
auth.authenticate() # 明文密码先加密再比对
is_user_obj = auth.authenticate(request,username=username,password=password) # 先对密码做加密处理 然后再比对
校验正确返回的是用户对象 错误返回的是None
2.保存用户登录状态
auth.login()
auth.login(request,is_user_obj) # 自动操作session相关
3.获取当前用户对象
request.user # 获取当前登录的用户对象 或者是 匿名用户
4.判断当前用户是否登录
request.user.is_authenticated() # 返回布尔值
5.校验登录装饰器
from django.contrib.auth.decorators import login_required
@login_required(login_url='/login/') # 局部配置
@login_required # 全局配置
LOGIN_URL = '/login/' # 需要在配置文件中添加配置
6.修改密码
request.user.check_password() # 自动加密再比对原密码
request.user.set_password() # 修改密码
request.user.save() # 将修改操作同步到数据库中
# 1.先比对原密码是否正确
is_right = request.user.check_password(old_password) # 自动加密再比对
if is_right:
# 2.修改密码
request.user.set_password(new_password) # 临时修改密码
# 3.保存数据
request.user.save() # 将修改操作同步到数据库中
7.注销登录
auth.logout(request)
8.注册用户
from django.contrib.auth.models import User
User.objects.create_user() # 创建普通用户
User.objects.create_superuser() # 创建超级用户/管理员
User.objects.create_user(username='cc',password='123') # 创建普通用户
User.objects.create_superuser(username='admin',password='123',email='123@qq.com') # 创建超级管理员
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' # 在settings.py中设置
'''告诉auth模块 不再使用auth_user 而是使用自定义的表'''
"""
1.类继承之后 需要重新执行数据库迁移命令 并且库里面是第一次操作才可以
2.auth模块所有的方法都可以直接在自定义模型类上面使用
自动切换参照表
"""
项目开发流程
1.需求分析
2.技术选型
3.分组开发
4.提交测试
5.交付上线
"""
我们以后写项目 一般都是从数据库设计开始!!!
一个好的数据库设计 会让我们写代码变得非常的轻松
"""
bbs数据表分析
"""
1.先确定表
2.再确定字段
3.最后确定关系
"""
1.用户表
继承AbstractUser
2.个人站点表
站点名称、标题、样式
3.文章表
标题、简介、内容、发布时间
4.文章分类表
分类名称
5.文章标签表
标签名称
6.文章点赞点踩表
文章、用户、赞/踩
7.文章评论表
文章、用户、评论内容、评论时间
标签:day12,module,request,auth,Django,user,csrf,import 来源: https://www.cnblogs.com/run-fast-hit-fast-win-fast/p/16311614.html