django 10

今日内容详细

一、csrf跨站请求伪造

1.简介

  钓鱼网站:假设是一个跟银行一模一样的网址页面,用户在该页面上转账,那么账户的钱会减少,但受益人却不是自己想要转账的人

2.模拟钓鱼网站

  一台计算机上两个服务端不同端口启动,钓鱼网站提交地址改为正规网站的地址

3.预防钓鱼网站的方法

  csrf策略:通过在返回的页面上添加???的表示信息,从而区分正规网站和钓鱼网站的请求

二、csrf操作(csrf通过策略)

1.form表单

  (模板语法)如果前后端是分离的,就用不了form表单这种方法,直接作用无效了

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

2.ajax

  方式一:先编写csrf模板语法,然后利用表单查找和值获取,手动添加

    'csrfmiddlewaretoken':$('[name="csrfmiddlewaretoken"]').val()

  方式二:直接利用模板语法即可

    'csrfmiddlewaretoken':'{{ csrf_token }}'

  方式三:通用方式( 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------------------------------
针对CBV不能直接在方法上添加装饰器,需要借助于专门添加装饰器的方法
@method_decorator(csrf_protect,name='post')
class MyHome(views.View):
    @method_decorator(csrf_protect)
    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) # 方式一:指名道姓的添加
    def post(self,request):
        return HttpResponse('Home Post view')

    

四、auth认证模块

  1.django执行数据库迁移命令之后会产生一个auth_user表

    该表可以配合auth模块做用户相关的功能:注册   登录    修改密码   注销  ...

    该表还是django admin后台管理默认的表

      django admin后台管理员账号创建

        python manage.py createsuperuser

  2.auth模块常见功能

    ①创建用户

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

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

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

    ③用户登录

auth.login(request.user_obj)

    ④判断用户是否登录

request.user.is_authecticated

    ⑤获取登录用户对象

request.user

    ⑥校验用户登录装饰器

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

     ⑦校验密码

request.user.check_password(old_password)

     ⑧修改密码

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

     ⑨注销登录

auth.logout(request)

五、auth_user表切换

1.models.py
    from django.contrib.auth.models import AbstracUser
    
    class Userinfo(AbstractUser):
        '''扩展auth_user表中没有的字段'''
        phone = models.BigIntegerField()
        desc = models.TextField()
2.settings.py
    AUTH_USER_MODEL = 'app01.Userinfo'

六、基于django中间件设计项目功能

模块的导入

  import 句式

  from...import...句式

1.简单的函数式封装

2.配置文件插拔式设计

 

posted @ 2022-09-13 15:50  W-Y-N  阅读(30)  评论(0)    收藏  举报