首页 > 其他分享 >Django框架10

Django框架10

时间:2023-01-02 14:45:23浏览次数:35  
标签:10 return 框架 get request Django session cookie django

今日内容概要

  • django中间件三个了解的方法
  • 基于django中间件实现功能的插拔式设计
  • cookie与session简介
  • django操作cookie
  • django操作session

今日内容详细

django中间件三个了解的方法

1.process_view
	路由匹配成功之后执行视图函数/类之前自动触发(顺序同process_request)
2.process_exception
	视图函数/类执行报错自动触发(顺序同process_response)
3.process_template_response
	视图函数/类返回的HttpResponse对象含有render并且对应一个方法的时候自动触发(顺序同process_response)

基于django中间件实现功能的插拔式设计

将各个功能制作成配置文件中的字符串形式
	如果想拥有该功能就编写对应的字符串
	如果不想要该功能则注释掉对应的字符串

补充知识:
    如果想要利用字符串导入模块 那么就需要使用importlib
import importlib
s1 = 'bbb.b'
res = importlib.import_module(s1)
print(res)# <module 'bbb.b' from 'D:\\pythonProject03\\djangomiddle\\bbb\\b.py'>
'''注意字符串的结尾最小单位只能是py文件 不能是py文件里面的变量名'''

cookie与session简介

'''
回忆:HTTP协议四大特性
	1.基于请求响应
	2.基于TCP IP作用于应用层之上的协议
	3.无状态 不会保存客户端的状态
	4.无连接
'''
最开始的网站都不需要用户注册 所有人来访问获取到的数据都是一样的
但随着互联网的发展很多网站都需要指定当前用户的状态

cookie
	保存在客户端上的与用户状态相关的信息
session
	保存在服务端上的与用户状态相关的信息
ps:session的工作需要依赖于cookie

补充:浏览器有资格拒绝保存服务端发送过来的cookie数据

django操作cookie

from django.shortcuts import render, HttpResponse, redirect

之前我们都是直接返回一个HttpResponse对象的 
要想操作cookie就不能直接返回HttpResponse对象 必须先用变量接收
obj1 = render()
return obj1
obj2 = HttpResponse()
return obj2
obj3 = redirect()
return obj3

编写一个真正意义上的用户登录功能
def login_func(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        if username == 'jason' and password == '123':
            obj = redirect('/home/')
            obj.set_cookie('name', username)
            return obj
    return render(request, 'loginPage.html')

# 编写一个装饰器 用户判断是否已经登陆
def login_auth(func_name):
    def inner(request, *args, **kwargs):
        if request.COOKIES.get('name'):
            res = func_name(request, *args, **kwargs)
            return res
        return redirect('/login/')
    return inner

@login_auth
def home_func(request):
    return HttpResponse('这是home页面 只有登陆的用户才可以查看')

进阶操作:用户没有登陆之前想访问某个网站在用户输入用户名和密码之后就应该调回该网站

def login_func(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        if username == 'jason' and password == '123':
            # 获取网址携带的参数
            target_path = request.GET.get('next')
            if target_path:
                obj = redirect(target_path)
            else:
                obj = redirect('/home/')
            obj.set_cookie('name', username)
            return obj
    return render(request, 'loginPage.html')


# 基于原来的装饰器做优化
def login_auth(func_name):
    def inner(request, *args, **kwargs):
        # print(request.path)  # 只获取用户输入的路由信息
        # print(request.path_info) # 只获取用户输入的路由信息
        # print(request.get_full_path()) # 获取用户输入的路由信息加问号后面携带的数据
        target_path = request.path_info
        if request.COOKIES.get('name'):
            res = func_name(request, *args, **kwargs)
            return res
        return redirect('/login/?next=%s' %target_path)
    return inner

django操作session

由于session是保存在服务端上面的数据 就应该有个地方可以存储
我们只需要执行数据库迁移命令即可 django会自动创建很多需要的表

django默认的session失效时间是14天

设置session
	request.session['key'] = value
		1.生成一个随机字符串
		2.对value数据做加密处理 并在django_session表中存储
			随机字符串>>>加密数据
		3.将随机字符串也发送一份给客户端保存(cookie)
			sessionid:随机字符串
获取session
	request.session.get('key')
		1.自动获取随机字符串
		2.取django_session表中根据随机字符串获取加密的数据
		3.自动解密数据并处理到request.session.get()中

补充说明:
    1.可以设置过期时间
    2.存储session数据的位置也可以修改

标签:10,return,框架,get,request,Django,session,cookie,django
From: https://www.cnblogs.com/lzjjjj/p/17019888.html

相关文章

  • Django框架9
    今日内容概要forms组件渲染标签forms组件展示信息forms组件校验补充forms组件参数补充forms组件源码剖析modelform组件django中间件今日内容详细forms组件渲染......
  • django12
    csrf跨站请求伪造钓鱼网站:模仿一个正规的网站让用户在该网站上做操作但是操作的结果会影响到用户正常的网站账户但是其中有一些猫腻 eg:英语四六级考试需要网上先缴......
  • Django框架11
    今日内容概要csrf跨站请求伪造csrf相关校验策略CBV添加装饰器的多种方式auth认证模块今日内容详细csrf跨站请求伪造钓鱼网站:模仿一个正规的网站让用户在该网站......
  • Django基础
    Django基础一、Django简介以及基本使用二、Django与数据库连接三、Django路由层四、Django视图层五、Django模板层六、Django模型层七、Django组件之Ajax请求八、......
  • 第十一章《Java实战常用类》第10节:Locale类
    ​世界上有很多种语言,说不同语言的人不仅仅使用的文字不同,就连表达习惯和思维方式可能也不相同。此外,即使是同一种语言在不同的国家或地区也有差别,例如中国大陆地区都使用简......
  • 力扣105 根据先序遍历以及中序遍历构建二叉树
    力扣105根据先序遍历以及中序遍历构建二叉树题目:给定两个整数数组preorder和inorder,其中preorder是二叉树的先序遍历,inorder是同一棵树的中序遍历,请构造二叉树......
  • 最完美WIN10_Pro_22H2.19045.2364软件选装纯净版VIP38.3
    [系统简介】=============================================================1.本次更新母盘来WIN10_Pro_22H2.19045.2364。进一步优化调整。2.不支持更新,更新后精简版更新......
  • 大数据趣味学习探讨(一):学习框架的重要性
    文章目录​​学习框架的重要性​​​​一、痛点​​​​二、规则vs元规则​​​​三、无穷无尽的新问题​​​​四、感悟​​学习框架的重要性框架类似底层方法论,有人说学习......
  • 第12代处理器 Widnows 10 调度
    原文地址:https://www.bilibili.com/video/BV1LK411B7ZS针对第1类处理器电源效率的处理器性能核心放置最小核心数量powercfg-attributesSUB_PROCESSOR0cc5b647-c1df-......
  • 2022年最有开创性的10篇AI论文总结
    2022年随着聊天GPT和Mid-journey和Dall-E等图像生成器的流行,我们看到了整个人工智能领域的重大进展。在人工智能和计算机科学的时代,这是令人振奋的一年。本文我们总结了......