csrf跨站请求伪造、csrf校验策略、csrf相关装饰器、auth认证模块、auth认证相关模块及操作、扩展auth_user表

今日内容

csrf跨站请求伪造

钓鱼网站:模仿一个正规的网站 让用户在该网站上做操作 但是操作的结果会影响到用户正常的网站账户,但是其中有一些猫腻

eg:英语四六级考试需要网上先缴费,但是你会发现卡里的钱扣了但是却交到了一个莫名其妙的账户,并不是真正的四六级官方账户

模拟钓鱼网站转账案例

真网站:
	<h1>真网站</h1>
<form action="" method="post">
    <p>用户名:
        <input type="text" name="username">
    </p>
    <p>转账人姓名
        <input type="text" name="target_name">
    </p>
    <p>转账金额
        <input type="text" name="money">
    </p>
        <input type="submit">
</form>

假网站:内部隐藏标签
	<form action="http://127.0.0.1:8000/transfer/" method="post">
    <p>用户名:
        <input type="text" name="username">
    </p>
    <p>转账人姓名
        <input type="text" >
        <input type="text" name="target_name" value="日日" style="display: none">
    </p>
    <p>转账金额
        <input type="text" name="money">
    </p>
        <input type="submit">
</form>

csrf校验策略

再提交数据的位置添加唯一标识


1.form表单csrf策略
	form表单内部添加 {% csrf_token %}

2.ajax请求csrf策略
	// 方式1:自己动手取值 较为繁琐  			{#data{'csrfmiddlewaretoken':$('input[name="csrfmiddlewaretoken"]').val()},#}
        
   // 方式2:利用模板语法自动获取(一定要用引号引起来)
{#data{'csrfmiddlewaretoken':'{{csrf_token}}','username':'jason'},#}
    
   // 方式3:直接引入一个js脚本即可(官网提供的)
 	参考:https://www.cnblogs.com/Dominic-Ji/p/9234099.html
    

csrf相关装饰器

from django.views.decorators.csrf import csrf_exempt,csrf_protect #导入模块

csrf_exemp		#整个django项目都校验csrf  某个视图函数/类不需要进行csrf校验
csrf_protect	#整个django项目都不校验csrf 某个视图类函数/类需要进行csrf校验

FBV:

#FBV使用直接加就行 与正常函数一直
@csrf_exempt
def index(request):
    pass
"""把csrf_exempt装饰器直接加到index函数中,使该函数不需要经过csrf验证(配置文件开启csrf验证)

CBV:

方式1:单独生效
	from django.utils.decorators import method_decorator #导入模块
    class MyView(views.View):
    @method_decorator(csrf_protect)
    def post(self,request):
        return HttpResponse('from cbv post view')
'''在函数上面添加装饰器 在括号里面填写装饰器的名字 '''


方式2:单独生效
@method_decorator(csrf_protect,name='post')
class MyView(views.View):
    def post(self,request):
        return HttpResponse('from cbv post view')
    
'''在类的上面添加装饰器 括号里写装饰器的名字 和 想要添加装饰器的函数名'''   


方式3:全局有效
	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')
'''在dispatch方法上面加 修改全局'''

注意:装饰器>>>:csrf_exempt特殊
    只有在dispatch方法上添加 才生效 

auth认证模块

前戏:django自带一个admin路由 但是需要我们提供管理员账号和密码
如果想要使用admin后台管理 需要先创建表 然后创建管理员账号 
直接执行数据库迁移命令即可产生默认的auth_user表 该表就是admin后台管理默认的认证表

创建超级管理员 
createsuperuser

auth认证相关模块及操作

用户注册:

from django.contrib.auth.models import User


def register_func(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        # 校验用户名是否已存在
        res = User.objects.filter(username=username)
        if res:
            return HttpResponse('用户名已存在')
        # 注册该用户(不能自己创建 因为密码加密无法实现)
        User.objects.create_user(username=username, password=password)
    return render(request, 'register.html')
'''
注意:创建用户的时候不要再用create方法 用create_user 可以将密码加密
'''

用户登录:

def login_func(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        #校验用户名和密码是否正确(自己无法比对密码 返回一个用户对象
        res=auth.authenticate(request,username=username,password=password)
        if res :
            #用户登陆成功 返回一个凭证
            auth.login(request,res) #自动操作
            return HttpResponse('登陆成功')
    return render(request,'login.html')

'''
获取到用户名和密码之后要进行比对 
自己无法比对密码 用到auth模块  返回的是一个用户对象 
保存session 用auth模块可以自动操作django_session表
'''

判断用户是否登录:

request.user.is_authenticated

获取登录用户对象数据:

request.uesr

校验用户是否登录装饰器:

from django.contrib.auth.decorators import login_required

@login_required(login_url = '/login/')		局部配置
配置文件 LOGIN_URL = '/login/' 				  全局配置

校验原密码是否正确:

request.user.check_password(原密码)

修改密码:

request.user.set_password(新密码)
request.user.save()

退出登录:

auth.logout(request)
自动操作session

扩展auth_user表

还想使用auth模块的功能 并且又想扩展auth_user表的字段
思路1:一对一字段关联
思路2:替换auth_user表
	步骤1:模型层编写模型类继承AbstractUser
   		from django.contrib.auth.models import AbstractUser
       class UserInfo(AbstractUser):
        # 填写AbstractUser表中没有的字段
        phone = models.BigIntegerField()
        desc = models.TextField()
 	步骤2:一定要在配置文件中声明替换关系
        AUTH_USER_MODEL = 'app01.UserInfo'
	ps:替换还有一个前提 就是数据库迁移没有执行过(auth相关表没有创建
posted @ 2022-12-30 12:58  李李大冒险  阅读(20)  评论(0编辑  收藏  举报
  1. 1 不可撤销
  2. 2 小年兽 程嘉敏
  3. 3 迷人的危险3 FAFA
  4. 4 山楂树之恋 程佳佳
  5. 5 summertime cinnamons / evening cinema
  6. 6 不谓侠(Cover 萧忆情Alex) CRITTY
  7. 7 神武醉相思(翻自 优我女团) 双笙(陈元汐)
  8. 8 空山新雨后 音阙诗听 / 锦零
  9. 9 Wonderful U (Demo Version) AGA
  10. 10 广寒宫 丸子呦
  11. 11 陪我看日出 回音哥
  12. 12 春夏秋冬的你 王宇良
  13. 13 世界が终わるまでは… WANDS
  14. 14 多想在平庸的生活拥抱你 隔壁老樊
  15. 15 千禧 徐秉龙
  16. 16 我的一个道姑朋友 双笙(陈元汐)
  17. 17 大鱼 (Cover 周深) 双笙(陈元汐)
  18. 18 霜雪千年(Cover 洛天依 / 乐正绫) 双笙(陈元汐) / 封茗囧菌
  19. 19 云烟成雨(翻自 房东的猫) 周玥
  20. 20 情深深雨濛濛 杨胖雨
  21. 21 Five Hundred Miles Justin Timberlake / Carey Mulligan / Stark Sands
  22. 22 斑马斑马 房东的猫
  23. 23 See You Again Wiz Khalifa / Charlie Puth
  24. 24 Faded Alan Walker
  25. 25 Natural J.Fla
  26. 26 New Soul Vox Angeli
  27. 27 ハレハレヤ(朗朗晴天)(翻自 v flower) 猫瑾
  28. 28 像鱼 王贰浪
  29. 29 Bye Bye Bye Lovestoned
  30. 30 Blame You 眠 / Lopu$
  31. 31 Believer J.Fla
  32. 32 书信 戴羽彤
  33. 33 柴 鱼 の c a l l i n g【已售】 幸子小姐拜托了
  34. 34 夜空中最亮的星(翻自 逃跑计划) 戴羽彤
  35. 35 慢慢喜欢你 LIve版 戴羽彤
  36. 36 病变 戴羽彤
  37. 37 那女孩对我说 (完整版) Uu
  38. 38 绿色 陈雪凝
  39. 39 月牙湾 LIve版 戴羽彤
像鱼 - 王贰浪
00:00 / 04:45
An audio error has occurred, player will skip forward in 2 seconds.

作词 : 周有才

作曲 : 周有才

这是一首简单的歌

没有什么独特

试着代入我的心事

它那么幼稚

像个顽皮的孩子

多么可笑的心事

只剩我还在坚持

谁能看透我的眼睛

让我能够不再失明

我要记住你的样子

像鱼记住水的拥抱

像云在天空中停靠

夜晚的来到

也不会忘了阳光的温暖

我要忘了你的样子

像鱼忘了海的味道

放下所有梦和烦恼

却放不下回忆的乞讨

多么可笑的心事

只剩我还在坚持

谁能看透我的眼睛

让我能够不再失明

记住你的样子

像鱼记住水的拥抱

像云在天空中停靠

夜晚的来到

也不会忘了阳光的温暖

我要忘了你的样子

像鱼忘了海的味道

放下所有梦和烦恼

却放不下回忆的乞讨

只剩自己就好