自我总结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模式

一切皆对象

posted @ 2019-12-11 18:29  jzm1201  阅读(85)  评论(0编辑  收藏  举报