中间件的基础
作者:互联网
目录
中间件基础
crsf相关装饰器
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方法装)
基于中间件思想编写项目
基于settings配置文件查看 会发现底层全都是配置文件
这不过是以字符串的路径的形式写入文件里面 并不是传统的import形式
比如说是在settings中from django.middleware.security import SecurityMiddleware中可以看到下载的django配置文件的SecurityMiddlewar是middleware文件下security的类
是运用import importlib的模块进行导入
importlib可以通过字符串的形式导入模块
* 在文件夹下创建py文件 进行导入 和import导入文件几乎一致 只不过导入的方式是以字符串形式导入
对比:
* 常规导入:
from ccc import funcB
print(funcB) # <module 'ccc.funcB' from 'D:\\Django_Project\\west\\ccc\\funcB.py'>
print(funcB.对象\函数对象) # from ccc.funcB jason
* 字符串导入方式:
import importlib
res_path = 'ccc.funcB'
print(res_path) # 只是一个字符串 但是北import_module识别之后
res = importlib.import_module(res_path)
print(res) # <module 'ccc.funcB' from 'D:\\Django_Project\\west\\ccc\\funcB.py'>
res = importlib.import_module(res_path) 和 from ccc import funcB print(funcB)一样
补充:
* 可以直接导入相关的变量值
from ccc.funcB import 变量名
print(变量名) 可以拿到相关的变量值
* 不可以导入路径单位
res_path = 'ccc.funcB.name'
importlib.import_module(res_path) 拿不到值
print(res_path) 拿到的只是那个str
最小的导入级别是模块文件
配合settings文件操作django(功能的插拔式设计)
公司项目开发规范的几个要点 :
快速的清理项目和添加功能 这时候就要将相关功能封装成文件然后导入 类似下方的:
* 方式1
def send_email(msg):
print('邮箱信息相关:%s'%msg)
def send_msg(msg):
print('短信信息相关:%s'%msg)
def send_qq(msg):
print('qq信息相关:%s'%msg)
def send_all(msg):
send_email(msg)
send_msg(msg)
send_qq(msg)
在相关启动文件里面直接导入就可以了,当然这是传统的文件导入方式
* 方式2
文件拆分 适合大项目 将不同功能的函数分发
包的总分发
import importlib
import settings
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()
# send是各个封装函数的发送功能
obj.send(msg)
在settings文件配置里要写入importlib支持的文件路径 注意这里是直接写刀类级的
NOTIFY_FUNC_LIST = [
'models.eamil.Email', *****
'models.msg.MSG',
'models.qq.QQ'
]
auth认证模块
# django提供给你快速完成用户相关功能的模块
用户相关功能:创建、认证、编辑...
# django也配套提供了一张'用户表'
执行数据库迁移命令之后默认产生的auth_user
id password last_login is_superuser username first_name last_name email is_staff
is active date_joined
# 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扩展表字段
# 方式1:编写一对一表关系(了解)
# 方式2:类继承(推荐)
from django.contrib.auth.models import AbstractUser
class Users(AbstractUser):
# 编写AbstractUser类中没有的字段 不能冲突!!!
phone = models.BigIntegerField()
addr = models.CharField(max_length=32)
需要在settings文件里面进行判断 将AUTH_USER_MODEL对象添加一个数据库
AUTH_USER_MODEL = 'app01.Users'
"""
1.类继承之后 需要重新执行数据库迁移命令 并且库里面是第一次操作才可以
2.auth模块所有的方法都可以直接在自定义模型类上面使用
自动切换参照表
"""
项目开发流程
1.需求分析
2.技术选型
3.分组开发
4.提交测试
5.交付上线
"""
我们以后写项目 一般都是从数据库设计开始!!!
一个好的数据库设计 会让我们写代码变得非常的轻松
"""
bbs数据表分析
"""
1.先确定表
2.再确定字段
3.最后确定关系
"""
1.用户表
继承AbstractUser
2.个人站点表
站点名称、标题、样式
3.文章表
标题、简介、内容、发布时间
4.文章分类表
分类名称
5.文章标签表
标签名称
6.文章点赞点踩表
文章、用户、赞/踩
7.文章评论表
文章、用户、评论内容、评论时间
ps:提前思考表关系
标签:中间件,基础,auth,django,导入,csrf,msg,import 来源: https://www.cnblogs.com/051nogato/p/16311531.html