自我总结52
基于django中间件实现功能的插拔式设计
1.设计思想
2.自己记下来
csrf跨站请求伪造
例子:早期最典型是钓鱼网站
解决思路
django里面校验csrf是由中间件执行的csrf
form表单解决
只需要在form表单内写一句话
{% csrf_token %}
ajax解决
方式一
自己在data参数里面加上键值对
data{'csrfmiddlewaretoken':$('input[name="csrfmiddlewaretoken"]').val()}
方式二
利用模板语法
data:{'csrfmiddlewaretoken':'{{ csrf_token }}' }
# 前端参数没有出错,但没有效果,可以加引号来尝试
方式三
利用官方提供的js代码
拷贝代码放入一个js文件中 你字需要在html页面上导入该js文件
之后你就不需要手动操作任何csrf相关的代码
# 拷贝到你们的本地
csrf相关的装饰器
@csrf_protect
校验
@csrf_exempt
不校验
FBV跟普通的装饰器一摸一样
CBV上的csrf
CBV中@csrf_exempt
是特例,只能给dispatch
类可以调用,而@csrf_protect
全部都可以
如何创建超级用户
python3 manage.py createsuperuser
auth模块
基于auth_user表 类似于一张已经提前创建好的用户表
常用方法
1.创建用户
create_user()
create_superuser()
2.校验用户名和密码是否正确
user_obj = auth authenticate(username=username,password=password)
3.保存用户登录状态
auth.login(request,user_obj) # 自动帮你操作session表
4.判断当前用户是否登录
request.user.is_authenticated()
5.校验密码是否正确
request.user.check_password(old_password)
6.修改密码
request.user.set_password(new_password)
request.user.save() # 一定要执行
7.注销
auth.logout(request)
8.校验登录装饰器
# 局部的
login_required(login_url='/login/')
# 全局的
LOGIN_URL = '/login/'
login_required
# 如果都配置了 按照局部的为准
如何扩展user_auth 表
1.利用表与表之间的一对一的关系
2.利用面向对象的继承
from django.contrib.auth.models import AbstractUser
class Userinfo(AbstractUser):
phone = ...
avatar = ...
# 不要与原先的表中的字段冲突
django settings源码及实际应用
逻辑思路
反射+importlib模式
一切皆对象