csrf跨站请求伪造
| 钓鱼网站:模仿一个正规的网站 让用户在该网站上做操作 但是操作的结果会影响到用户正常的网站账户 但是其中有一些猫腻 |
| eg:英语四六级考试需要网上先缴费 但是你会发现卡里的钱扣了但是却交到了一个莫名其妙的账户 并不是真正的四六级官方账户 |
| |
| 模拟钓鱼网站案例:转账案例 |
| 内部隐藏标签 |
| |
| 思考:如何区分真假网站页面发送的请求 |
csrf校验策略
| 在提交数据的位置添加唯一标识 |
| |
| 1.form表单csrf策略 |
| form表单内部添加 {% csrf_token %} |
| 2.ajax请求csrf策略 |
| // 方式1:自己动手取值 较为繁琐 |
| { |
| // 方式2:利用模板语法自动获取(一定要用引号引起来) |
| { |
| // 方式3:直接引入一个js脚本即可(官网提供的) |
| 参考:https://www.cnblogs.com/Dominic-Ji/p/9234099.html |
csrf相关装饰器
| 整个django项目都校验csrf 但是某些个视图函数\类不想校验 |
| 整个django项目都不校验csrf 但是某些个视图函数\类需要校验 |
| |
| FBV添加装饰器的方式(与正常函数添加装饰器一致) |
| from django.views.decorators.csrf import csrf_exempt, csrf_protect |
| |
| @csrf_protect |
| def transfer_func(request):pass |
| |
| CBV添加装饰器的方式(与正常情况不一样 需要注意) |
| 主要有三种方式 |
| |
| class MyView(views.View): |
| @method_decorator(csrf_protect) |
| def dispatch(self, request, *args, **kwargs): |
| return super().dispatch(request, *args, **kwargs) |
| |
| |
| def post(self, request): |
| return HttpResponse('from cbv post view') |
| |
| 注意有一个装饰器是特例只能有一种添加方式>>>:csrf_exempt |
| 只有在dispatch方法添加才会生效 |
auth认证模块
| 前戏:django自带一个admin路由 但是需要我们提供管理员账号和密码 |
| 如果想要使用admin后台管理 需要先创建表 然后创建管理员账号 |
| 直接执行数据库迁移命令即可产生默认的auth_user表 该表就是admin后台管理默认的认证表 |
| 1.创建超级管理员 |
| python38 manage.py createsuperuser |
| |
| 基于auth_user表编写用户相关的各项功能 |
| 登录、校验用户是否登录、修改密码、注销登录等 |
auth认证相关模块及操作
| from django.contrib import auth |
| from django.contrib.auth.models import User |
| 1.用户注册功能 |
| User.objects.create_user(username=username, password=password) |
| 2.判断用户名和密码是否正确 |
| user_obj = auth.authenticate(request, |
| username=username, |
| password=password) |
| 3.判断用户是否登录 |
| request.user.is_authenticated |
| 4.获取登录用户对象数据 |
| request.user |
| 5.校验用户是否登录装饰器 |
| from django.contrib.auth.decorators import login_required |
| @login_required(login_url='/login/') 局部配置 |
| @login_required 全局配置 |
| 配置文件中LOGIN_URL = '/login/' |
| 6.校验原密码是否正确 |
| request.user.check_password(原密码) |
| 7.修改密码 |
| request.user.set_password(新密码) |
| request.user.save() |
| 8.退出登录 |
| auth.logout(request) |
扩展auth_user表
| 还想使用auth模块的功能 并且又想扩展auth_user表的字段 |
| 思路1:一对一字段关联 |
| 思路2:替换auth_user表 |
| 步骤1:模型层编写模型类继承AbstractUser |
| from django.contrib.auth.models import AbstractUser |
| class UserInfo(AbstractUser): |
| |
| phone = models.BigIntegerField() |
| desc = models.TextField() |
| 步骤2:一定要在配置文件中声明替换关系 |
| AUTH_USER_MODEL = 'app01.UserInfo' |
| ps:替换还有一个前提 就是数据库迁移没有执行过(auth相关表没有创建) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现