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.配置文件插拔式设计

浙公网安备 33010602011771号