django框架11
内容概要
- 用户登录之后跳转到用户登录之前想要访问的页面
 - django操作cookie补充
 - django操作session
 - django操作session补充
 - CBV添加装饰器
 - django中间件
 - 自定义中间件
 - csrf跨站请求伪造
 - csrf解决策略
 
内容详情
用户成功登录跳转到之前想要访问的页面
def login_auth(func_name):
    def inner(request, *args, **kwargs):
        # print(request.path)
        # print(request.path_info)
        1.获取用户没有登录之前想要访问的网址地址
        target_path = request.get_full_path()
        if request.COOKIES.get('name'):
            res = func_name(request, *args, **kwargs)
            return res
        else:
            2.将用户想要访问的地址当做参数传给登录功能
            return redirect(f'/login/?next={target_path}')
    return inner
def login(request):
    if request.method == 'POST':
        name = request.POST.get("name")
        if name == 'jason':
            # 获取用户登录之前想要访问的地址
            next_path = request.GET.get('next')
            '''注意 用户也有可能直接访问的登录页面 没有想要访问的其他页面'''
            if next_path:
                res = redirect(next_path)  # 跳转到之前想要访问的界面
            else:
                res = redirect('/home/')  # 默认登录之后跳转的界面
            res.set_cookie('name', 'jason')
            return res
    return render(request, 'login.html')
django操作cookie补充
set_signed_cookie(key,value,salt='加密盐')
set_signed_cookie(key,value,max_age=超时时间:默认是秒数)
expires:专门针对IE浏览器设置超时时间
HttpResponse对象.delete_cookie(key)
ps:学到这里要对登录操作有本质的认识:核心就是cookie的存取
django操作session
# 设置
request.session['key'] = value  # 可以设置多组
# 获取
request.session.get('key')  # 可以获取多组
"""
服务端保存用户相关状态信息 返回给客户端随机字符串
针对保存 django需要一张表来处理 >>> 自带的django_session表
ps:django数据库迁移命令会产生一堆默认的表 其中就有一张django_session表
"""
1.设置session内部发生的事情
  1.产生一个随机字符串
  2.表中存储随机字符串与加密数据的对应关系
  3.并将产生的随机字符串也给客户端发送一份并让其保存
    sessionid:随机字符串
2.获取session内部发送的事情
  1.自动获取客户端请求中的随机字符串
  2.自动去存储session数据的表中比对
  3.如果比对成功自动获取并'解密处理'
# django默认的session失效时间是14天
django操作session补充
request.session.session_key  # 获取产生的随机字符串
request.session.delete()  # 只删客户端
request.session.flush()  # 服务端 客户端都删
request.session.set_expiry(value)  # 设置超时时间
    * 如果value是个整数,session会在些秒数后失效。
    * 如果value是个datatime或timedelta,session就会在这个时间后失效。
    * 如果value是0,用户关闭浏览器session就会失效。
    * 如果value是None,session会依赖全局session失效策略。
针对session数据的存储位置 有五种方案
  1.数据库存储
  2.缓存存储
  3.文件存储
  4.缓存+数据库存储
  5.动态加密
CBV添加装饰器
'''需要借助于一个专门的装饰器模块'''
from django.utils.decorators import method_decorator
# 方式1:直接在类中的某个方法上添加
class MyLoginView(views.View):
    @method_decorator(login_auth)
    def get(self, request):
        return HttpResponse("from CBV get view")
# 方式2:直接在类名上添加并指定
@method_decorator(login_auth, name='get')
class MyLoginView(views.View):
    def get(self, request):
        return HttpResponse("from CBV get view")
# 方式3:重写dispatch方法并添加作用于类中所有的方法
class MyLoginView(views.View):
    @method_decorator(login_auth)
    def dispatch(self, request, *args, **kwargs):
        super().dispatch(request,*args,**kwargs)
django中间件
自定义中间件
csrf跨站请求伪造
csrf解决策略
												
											django框架11的更多相关文章
- Django框架11 /form组件、modelForm组件
		
Django框架11 /form组件.modelForm组件 目录 Django框架11 /form组件.modelForm组件 1. form组件介绍 2. form常用字段与插件 3. form所 ...
 - MySQL在Django框架下的基本操作(MySQL在Linux下配置)
		
[原]本文根据实际操作主要介绍了Django框架下MySQL的一些常用操作,核心内容如下: ------------------------------------------------------ ...
 - django框架介绍
		
主要内容 1. Django框架发展 2. Django架构,MTV模式 3. 开发流程 4. 开发实例——Poll python下各种框架 一 ...
 - Django框架全面讲解
		
Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. ...
 - Django框架基础之Form组件
		
服务端假设所有用户提交的数据都是不可信任的,所以Django框架内置了form组件来验证用户提交的信息 form组件的2大功能: 1 验证(显示错误信息) 2 保留用户上次输入 ...
 - Django ---- 框架简介
		
MVC框架和MTV框架 mvc,全名是 Model View Controller, 是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器(Cont ...
 - WEB框架-Django框架学习-预备知识
		
今日份整理,终于开始整个阶段学习的后期了,今日开始学习Django的框架,加油,你是最胖的! 1.web基础知识 1.1 web应用 Web应用程序是一种可以通过Web访问的应用程序,程序的最大好处是 ...
 - Django 框架基础
		
Python web框架 本质 收发socket消息 --> 按照HTTP协议消息格式去解析消息 路径和要执行的函数的对应关系 --> 主要的业务逻辑 字符串替换 --> 模板(特殊 ...
 - Django框架简介-路由系统
		
2.2 路由系统 Django 1.11版本 URLConf官方文档 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表. 你就是 ...
 
随机推荐
- leetcode多线程题目
			
代码附上了力扣没显示出来的测试 按序打印 class Foo { private CountDownLatch latch = new CountDownLatch(1); private Count ...
 - uView的DatetimePicker详解
			
uView UI号称: 是全面兼容nvue的uni-app生态框架,全面的组件和便捷的工具会让您信手拈来,如鱼得水 亲身感受,用起来真的坑太多, 官方文档太简洁, 很多配置都没说明也没代码, 上百度查 ...
 - input type='file'限制上传文件类型
			
前端与后台数据进行对接时,就避免不了要使用ajax进行http请求,常用的请求就两个post与get:然而常见的post请求的需求是文件上传,可能我一说到文件上传大家都觉得so easy啊,没什么嘛 ...
 - 使用Nginx做反向代理的配置
			
安装Nginx服务之后 修改Nginx配置文件 如下server字段中主要是配置listen监听8080 端口,然后静态文件袋里到8001 后端端口代理到8000 server { listen 8 ...
 - SpringMVC-注解@RequestParam
			
当请求的参数名称与Controller的业务方法不一致时,就需要通过@RequestParam注解进行显示的绑定 1.value:映射参数 @RequestMapping("/report1 ...
 - Python脚本----打印菜单
			
def print_menu(): """打印菜单""" print ("="*50) print ("1. ...
 - kubectl get node -n wide --show-labels
			
集群环境:1.k8s用的是二进制方式安装2.操作系统是linux (centos)3.操作系统版本为 7.4/7.94.k8s的应用管理.node管理.pod管理等用rancher.k8s令牌以及ma ...
 - 纯css 实现动画的暂停和运动
			
<template> <div> <input id="stop" type="radio" name="p ...
 - Blazor 组件库 BootstrapBlazor中 Ajax 组件的使用
			
组件解决的问题 由于Blazor在与服务器连接时使用了Websocket,仅在第一次连接时会走原MVC的连接逻辑.所以,我们无法在这个过程中完成例如身份认证.cookie处理等操作. 此组件即为解决此 ...
 - Java语言学习day11--7月10日
			
今日内容介绍1.自定义类型的定义及使用2.自定义类的内存图3.ArrayList集合的基本功能4.随机点名器案例及库存案例代码优化 ###01引用数据类型_类 * A: 数据类型 * a: java中 ...