今日内容详细
csrf跨站请求伪造
# 前戏
钓鱼网站:模仿一个正规的网站 让用户再该网站上做操作但是操作结果会会影响用户正常的网站用户
'''
在代码处做一些小操作就可以做到
思考:如何区分真假网站页面发送的请求
'''
csrf校验策略
在提交数据的位置添加唯一标识
# form表单csrf策略
form表单内部添加{% csrf_token %}
# ajax请求csrf策略
方式一: 手动取值 较为繁琐
{#data: {'csrfmiddlewaretoken':$('input[name="csrfmiddlewaretoken"]').val()},#}
方式二: 利用模板语法自动获取(一定要用引号引起来)
{#data:{ 'csrfmiddlewaretoken':'{{ csrf_token }}','username':'jason'},#}
方式三: 直接引入一个js脚本即可(官网提供)
参考:https://www.cnblogs.com/Dominic-Ji/p/9234099.html
csrf相关装饰器
# 两个极端情况
整个django项目都校验csrf 但是某个视图函数\类不需校验
整个django项目都不检验csrf 但是某些个视图函数\类需要校验
# 处理方式
方式一: FBV添加装饰器的方式(与正常函数添加装饰器一致)
from django.viwes.decorrators.csrf import csrf_exempt,csrf_protect
'''被导入的就是语法糖exempt可以取消校验 protect就是校验'''
@csrf_exempt
def func(request):pass
方式二: CBV添加装饰的方式(与正常情况不一样)
@method_decorator(csrf_protect) #方式一:单独生效
class MyView(views.View):
@method_decorator(csrf_protect) # 方式二: 整个类生效
def dispatch(self, request, *args, **kwargs):
return super().dispatch(request, *args, **kwargs)
@method_decorator(csrf_protect) # 方式三: 单独生效
def post(self, request):
return HttpResponse('from cbv post view')
'''注意针对csrf_exempt只能有一种添加方式 只有在dispatch生效'''
auth认证模块
# 前戏
django自带一个admin路由 但是我们并没有管理员相关的账号密码
'''
如果想要使用admin后台管理 需要先创建表 然后创建管理员
直接执行数据库迁移命令即可产生默认的auth_user表 该表就是admin后代管理默认认证表
'''
# 创建超级管理员
python38 manage.py createsuperuser
auth认证相关模块及操作
from django.contrib import auth
from django.contrib.auth.models import User
# 用户注册
User.objects.create_user(username=username,password=password)
# 判断用户名和密码是否正确
user_obj = auth.authenticate(request,
username=username,
password=password)
'''使用authenticate来获取的是一个对象 参数需同时传入id和密码'''
# 判断用户是否登入
request.user.is_authenticated
# 获取登入用户对象数据
request.user
# 校验用户是否登入装饰器
from django.contrib.auth.decorators import login_required
'''局部配置'''
@login_required(login_rel='/login/')
'''全局配置'''
@login_required
'''在配置文件中要将LOGIN_URL= "/login/" '''
# 校验原密码是否正确
request.user.check_password(原密码)
# 修改密码
request.user.set_password(新密码)
request.user.save()
'''保存修改的密码'''
# 退出登入
auth.logout(request)
扩展auth_user表
'''因为所给的字段有限 想要拓展字段可以有两种思路'''
思路一:建立外键字段
# 利用外键字段和auth_user表做关联 就等价于拓展了字段
思路二:替换掉auth_user表
"""步骤如下"""
# 1.模型层新建立一张表 并且继承AbstractUser
from django.contrib.auth.models import AbstractUser
class UserInfo(AbstractUser):
'''在这里填写auth_user没有的字段'''
phone = models.BigIntegrField()
# 2.一定要在配置文件声明替换关系
AUTH_USER_MODEL = 'app01.UserInfo'
# 注意
'''在使用替换表的时候要注意没有执行数据库迁移命令'''
标签:request,校验,auth,django,user,csrf,操作
From: https://www.cnblogs.com/xiaochenxiangchangpang/p/17019914.html