今日内容 csrf知识点auth模块的使用

  • csrf跨站请求伪造

1.简介
   钓鱼网站:假设是一个跟银行一模一样的网址页面 用户在该页面上转账
账户的钱会减少 但是受益人却不是自己想要转账的那个人
2.模拟
   一台计算机上两个服务端不同端口启动 钓鱼网站提交地址改为正规网站的地址
3.预防
   csrf策略:通过在返回的页面上添加独一无二的标识信息从而区分正规网站和钓鱼网站的请求

  • csrf操作

1.form表单

	<form action="" method="post">
    	{% csrf_token %}
	</form>

2.ajax

方式1:先编写csrf模板语法 然后利用标签查找和值获取 手动添加
      'csrfmiddlewaretoken':$('[name="csrfmiddlewaretoken"]').val()
方式2:直接利用模板语法即可
      'csrfmiddlewaretoken':'{{ csrf_token }}'
方式3:通用方式(js脚本)
    	扩展性最高
  • csrf相关装饰器

问题:
1.当整个网站默认都不校验csrf 但是局部视图函数需要校验如何处理
2.当整个网站默认都校验csrf 但是局部视图函数不需要校验如何处理
针对这两个问题我们可以利用装饰器来解决
针对FBV:

from django.views.decorators.csrf import csrf_protect,csrf_exempt
"""
csrf_protect 校验csrf
csrf_exempt 不校验csrf
"""
# @csrf_protect
@csrf_exempt
def home(request):
    return HttpResponse('哈哈哈')

针对CBV不能直接在方法上添加装饰器,需要借助于专门添加装饰器的方法

# @method_decorator(csrf_protect, name='post')  # 方式2:指名道姓的添加
class MyHome(views.View):
    @method_decorator(csrf_protect)  # 方式3:影响类中所有的方法
    def dispatch(self, request, *args, **kwargs):
        super(MyHome, self).dispatch(request, *args, **kwargs)

    def get(self, request):
        return HttpResponse('Home Get view')

    # @method_decorator(csrf_protect)  # 方式1:指名道姓的添加
    def post(self, request):
        return HttpResponse('Home Post view')

针对csrf_exempt只有方式3有效 针对其他装饰器上述三种方式都有效

  • auth认证模块

django执行数据库迁移命令之后会产生一个auth_user
   该表可以配合auth模块做用户相关的功能:注册,登录,修改密码,注销...等
   该表还是django admin后台管理默认的表
创建管理员账号:

python manage.py createsuperuser

auth模块常用功能

1.创建用户

from django.contrib.auth.models import User
User.object.create_user(username,password)
User.object.create_superuser(username,password,email)

2.校验用户名和密码是否正确

from django.contrib import auth
auth.authenticate(request,username,password)

3.用户登录

auth.login(request,user_obj)

4.判断用户是否登录

request.user.is_authecticated

5.获取登录用户对象

request.user

6.校验用户登陆装饰器

from django.contrib.auth.decorators import login_required
# 跳转局部配置
login_required(login_url='/login/')
# 跳转全局配置
LOGIN_URL = '/login/'

7.校验密码是否正确

request.user.check_password(old_password)

8.修改密码

request.user.set_password(new_password)
request.user.save()

9.注销登录

auth.login(request)
  • auth_user表切换

1.models.py
from django.contrib.auth.models import AbstractUser

class Userinfo(AbstractUser):
# 拓展auth_user表中没有的字段
phone = models.BigIntegerField()
desc = models.TextField()

2.settings.py

AUTH_USER_MODEL = 'app01.Userinfo'
posted @ 2022-09-13 21:44  你好你好你好丶  阅读(61)  评论(0)    收藏  举报