Python后台开发——Django高级与项目实战

1 Cookie

1.1 Cookie机制

在程序中,会话跟踪是很重要的事情。理论上,一个用户的所有请求操作都应该属于同一个会话,而另一个用户的所有请求操作则应该属于另一个会话,二者不能混淆。例如,用户A在超市购买的任何商品都应该放在A的购物车内,不论是用户A什么时间购买的,这都是属于同一个会话的,不能放入用户B或用户C的购物车内,这不属于同一个会话。

而Web应用程序是使用HTTP协议传输数据的。HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。即用户A购买了一件商品放入购物车内,当再次购买商品时服务器已经无法判断该购买行为是属于用户A的会话还是用户B的会话了。要跟踪该会话,必须引入一种机制。

Cookie就是这样的一种机制。它可以弥补HTTP协议无状态的不足。在Session出现之前,基本上所有的网站都采用Cookie来跟踪会话Cookie通过在客户端记录信息确定用户身份。

1.2 什么是Cookie

  • cookie是保存在用户浏览器端的键值对
  • Cookie是由服务器生成,存储在浏览器中的键值对数据
  • 每个域名的Cookie相互独立
  • 浏览器访问域名为A的URL地址,会把A域名下的Cookie一起传递到服务器
  • Cookie可以设置过期时间,默认为None,即关闭当前浏览器,Cookie立即清除.
  • 保存站点的用户数据.

1.3 Cookie原理

请添加图片描述
请添加图片描述

Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。

1.4 Cookie属性

1.4.1 属性表

属性 说明
set_cookie(常用) 设置Cookie的值 max_age: 默认为None
COOKIES.get(常用) 获取Cookie的值
String name 该Cookie的名称。Cookie一旦创建,名称便不可更改
Object value 该Cookie的值。如果值为Unicode字符,需要为字符编码。如果值为二进制数据,则需要使用BASE64编码
int maxAge 该Cookie失效的时间,单位秒。如果为正数,则该Cookie在maxAge秒之后失效。如果为负数,该Cookie为临时Cookie,关闭浏览器即失效,浏览器也不会以任何形式保存该Cookie。如果为0,表示删除该Cookie。默认为–1
boolean secure 该Cookie是否仅被使用安全协议传输。安全协议。安全协议有HTTPS,SSL等,在网络上传输数据之前先将数据加密。默认为false
String path 该Cookie的使用路径。如果设置为“/sessionWeb/”,则只有contextPath为“/sessionWeb”的程序可以访问该Cookie。如果设置为“/”,则本域名下contextPath都可以访问该Cookie。注意最后一个字符必须为“/”
String domain 可以访问该Cookie的域名。如果设置为“.google.com”,则所有以“google.com”结尾的域名都可以访问该Cookie。注意第一个字符必须为“.”
String comment 该Cookie的用处说明。浏览器显示Cookie信息的时候显示该说明
int version 该Cookie使用的版本号。0表示遵循Netscape的Cookie规范,1表示遵循W3C的RFC 2109规范

1.4.2 代码实例

1.4.2.1 set_cookie
  1. URL配置
re_path('set_cookie/(.+)/(.+)',views.set_cookie_handler,name='set_cookie') 
  1. views配置
def set_cookie_handler(request,key,value): 
    response = HttpResponse() 
    #max_age=60\*60 表示Cookie的有效时间3600秒,即1小时 
    response.set_cookie(key,value,max_age= 60 * 60) 
    return response 

1.4.2.2 COOKIES.get
  1. URL配置
re_path('get_cookie/(.+)',views.get_cookie_handler,name='get_cookie')
  1. views配置
def get_cookie_handler(request,key): 
    value = request.COOKIES.get(key) 
    return HttpResponse(value)

注:在测试cookie之前,需要先对Django项目执行迁移,才可以在数据库中得到对应的操作表。

1.4.3 Cookie的删除和修改

  • Cookie并不提供修改、删除操作。如果要修改某个Cookie,只需要新建一个同名的Cookie,添加到response中覆盖原来的Cookie。
  • 如果要删除某个Cookie,只需要新建一个同名的Cookie,并将maxAge设置为0,并添加到response中覆原来的Cookie。注意是0而不是负数。负数代表其他的意义。
  • 注意:修改、删除Cookie时,新建的Cookie除value、maxAge之外的所有属性,例如name、path、domain等,都要与原Cookie完全一样。否则,浏览器将视为两个不同的Cookie不予覆盖,导致修改、删除失败。

1.4.4 Cookie的域名

  • Cookie是不可跨域名的。域名www.google.com颁发的Cookie不会被提交到域名www.baidu.com去。这是由Cookie的隐私安全机制决定的。隐私安全机制能够禁止网站非法获取其他网站的Cookie。
  • 正常情况下,同一个一级域名下的两个二级域名如www.helloweenvsfei.com和images.helloweenvsfei.com也不能交互使用Cookie,因为二者的域名并不严格相同。如果想所有helloweenvsfei.com名下的二级域名都可以使用该Cookie,需要设置Cookie的domain参数,例如:
Cookie cookie = new Cookie("time","20080808"); 
// 新建Cookie cookie.setDomain(".helloweenvsfei.com");          
// 设置域名 cookie.setPath("/");                              
// 设置路径 cookie.setMaxAge(Integer.MAX_VALUE);               
// 设置有效期 response.addCookie(cookie);                       
// 输出到客户端 
  • 可以修改本机C:\WINDOWS\system32\drivers\etc下的hosts文件来配置多个临时域名,然后使用setCookie.jsp程序来设置跨域名Cookie验证domain属性。
  • 注意:domain参数必须以点(".")开始。另外,name相同但domain不同的两个Cookie是两个不同的Cookie。如果想要两个域名完全不同的网站共有Cookie,可以生成两个Cookie,domain属性分别为两个域名,输出到客户端。

1.4.5 Cookie的安全性

  1. Cookie是存储在客户端,即浏览器的,所有具有不安全性
  2. 对于敏感的数据,应该加密,或者保存在服务端

2 Session

2.1 Session机制

除了使用Cookie,Web应用程序中还经常使用Session来记录客户端状态。Session是服务器端使用的一种记录客户端状态的机制,使用上比Cookie简单一些,相应的也增加了服务器的存储压力。

2.2 什么是Session

  • session是保存在服务器端的键值对。
  • Session基于Cookie的。
  • Session把敏感的数据以加密的方式保存在服务器。
  • Session默认的过期时间是两周,如果自己设置了过期时间,这样自己设定的优先级就会高于默认的
  • Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。如果说Cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了。

2.3 Session原理

请添加图片描述

2.4 Session常用方法

属性 说明
session[key] = value 设置Session的值 设置过期时间,默认为2周: session.set_expiry(60*60)
session.get(key) 获取Session的值,如果没有这个key,返回None
flush() 删除表数据
clear() 清空sessionId对应的数据

2.5 代码实例

2.5.1 设置

  1. URL配置
re_path('set_session/(.+)/(.+)',views.set_session_handler,name='set_session'), 
  1. views配置
def set_session_handler(request,key,value):
    request.session[key] = value 
    #设置过期时间 
    request.session.set_expiry(60 * 60) 
    return HttpResponse('设置成功') 

2.5.2 获取

  1. URL 配置
re_path('get_session/(.+)',views.get_session_handler,name='get_session'), 
  1. views配置
def get_session_handler(request,key): 
    value = request.session.get(key) 
    return HttpResponse(value) 

2.5.3 删除

  1. URL配置
path('flush',views.flush_session_handler,name='flush'), 
  1. views配置
def flush_session_handler(request): 
    request.session.flush()

2.5.4 clear

  1. URL配置
path('clear',views.clear_session_handler,name='clear'),
  1. views配置
def clear_session_handler(request): 
    request.session.clear(
最低0.47元/天 解锁文章
Python后台开发--Django高级项目实战
weixin_44888486的博客
06-29 778
1 Cookie 1.1 Cookie机制 在程序中,会话跟踪是很重要的事情。理论上,一个用户的所有请求操作都应该属于同一个会话,而另一个用户的所有请求操作则应该属于另一个会话,二者不能混淆。例如,用户A在超市购买的任何商品都应该放在A的购物车内,不论是用户A什么时间购买的,这都是属于同一个会话的,不能放入用户B或用户C的购物车内,这不属于同一个会话。 而Web应用程序是使用HTTP协议传输数据的。HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这
Django中的ORM
weixin_30314813的博客
07-15 48
ORM配置 """ 1、创建数据库 2、配置mysql的数据库链接 setting文件里的DATABASES设置为 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 's8day61', ## 数据库名称 ...
Django开发最佳实践与高级技巧
m0_74414232的博客
09-23 144
Django开发中,正确使用框架提供的功能和设计合理的架构,可以大大提高开发效率和代码质量。本文将总结Django开发的一些重要技巧和最佳实践。Class Based View更面向对象。函数视图实现单一功能。
Django框架之python后端框架介绍
最新发布
Xiao20000101的博客
04-24 980
特点: 大而全,自带的功能特别特别特别的多,类似于百科全书不足之处:有时候过于笨重。
Python】: Django Web开发实战(详细教程)
wslejbb的博客
03-20 1286
Django是一个非常强大的Python Web开发框架,它以"快速开发"和"干净、实用的设计"为设计宗旨。本文将从Django的基本概念开始,逐渐引导大家理解如何使用Django构建复杂的web应用程序。
python实战项目(Django技术点)
IT瘾君子的博客
10-21 1216
python编程快速上手(持续更新中…) 1.项目准备 1.1 python实战-Django工程创建和配置 2.用户注册 2.1用户模块类 2.1.1定义用户模型类 2.1.2迁移用户模型类 2.2用户注册业务实现 2.2.1RESTful设计方案 2.2.2跨域CORS 2.2.3状态保持 3.验证码 3.1图像验证码 3.2短信验证码 3.2.1容联云通信短信平台 3.2.2pipeline操作Redis数据库 3.3异步方案Celery 3.3.1消息队列介绍和使用 3.3.2Celery ...
Python基于Django实战项目源码——美多商城.zip
05-08
Python基于Django实战项目源码——美多商城 Python基于Django实战项目源码——美多商城 Python基于Django实战项目源码——美多商城 Python基于Django实战项目源码——美多商城 Python基于Django的...
Python高效开发实战——Django、Tornado、Flask、Twisted 本书源代码
03-27
Python高效开发实战——Django、Tornado、Flask、Twisted 本书源代码 Python高效开发 实战 也许你听说过全栈工程师,他们善于设计系统架构,精通数据库建模、通用网络协议、后端并发处理、前端界面设计,在学术研究...
基于Python Django框架的实战项目源码
03-25
项目标题:基于Python Django实战项目源码解析 技术栈:本项目主要采用Python语言开发,辅以HTML和CSS进行前端设计。 文件概览:总计174个文件,包括以下类型: - pyc文件(已编译的Python文件):50个 - py文件...
基于PythonDjango项目实战设计源码
04-09
Django项目实战 - 基于Python开发,包含21个文件,如PY、XML、GITIGNORE、IML、LICENSE、MD和HTML等。该项目为用户提供了一个基于Django实战项目,通过界面交互和功能模块,为用户提供了一个高效、易用的Django...
Python Django Web典型模块开发实战_用Django REST framework实现豆瓣API应用项目.pdf
12-25
Python Django Web典型模块开发实战_用Django REST framework实现豆瓣API应用_编程项目案例实例详解课程教程
django项目实例(django 简易博客开发
02-29
前几天写的django 简易博客开发记录,贴个链接吧 django 简易博客开发 1 安装、创建、配置、admin使用 http://www.cnblogs.com/cacique/archive/2012/09/29/2707976.html django 简易博客开发 2 模板和数据查询 http://www.cnblogs.com/cacique/archive/2012/09/30/2709143.html django 简易博客开发 3 静态文件、from 应用与自定义 http://www.cnblogs.com/cacique/archive/2012/10/01/2709668.html django 简易博客开发 4 comments库使用及ajax支持 http://www.cnblogs.com/cacique/archive/2012/10/03/2710803.html django 简易博客开发 5 markdown支持、代码高亮、gravatar头像服务 http://www.cnblogs.com/cacique/archive/2012/10/07/2713703.html
项目实战 Python Django 个人网站 电影推荐网站 完整代码
05-31
完整版Python-Django项目,调试通过,直接下载即可运行包括:登陆、注册、浏览、搜索、发布资源、评论等多个功能。可作为新手练习,课程设计,毕业设计,代码注释详细,便于理解。
精选了20个Python实战项目(附源码),拿走就用!
热门推荐
pdcfighting的博客
07-07 4万+
点击上方“Python爬虫与数据挖掘”,进行关注回复“书籍”即可获赠Python从入门到进阶共10本电子书今日鸡汤昔闻洞庭水,今上岳阳楼。大家好,我是小F。Python是目前最好的编程语言之一。由于其可读性和对初学者的友好性,已被广泛使用。那么要想学会并掌握Python,可以实战的练习项目是必不可少的。接下来,我将给大家介绍20个非常实用的Python项目,帮助大家更好的...
Django项目实战:在线作业管理系统(1)
P_的博客
05-28 2万+
项目环境:Python 3.6 + Django 2.0 + MySQL(Navicat for MySQL) 总体需求: 教师端 学生端 个人信息 注册、登陆、查看、编辑个人信息;修改密码 注册、登陆、查看、编辑个人信息;修改密码 课程信息 创建、删除课程; 创建、修改、删除作业; 查看学生提交的作业; ...
django foreignkey 中的 self 递归用法
iflreey的专栏
03-07 8393
<br />django 主键要与自己行成多对一的关系时可以用models.foreignkey('self'),如果直接存储会提示主键不存在,无法保存.<br />例如:我想做一个导航类,这些导航存储着自己的父节点,一开始写法为:<br />class Navi(models.Model): """ Navi has four type: goods, news, page and custom """ STYLE_CHOICES = ( ('go
Django开发步骤
PERSUIDER的博客
03-05 3784
1、创建Django project 1) start project 创建一个文件夹,命名为root(或者自己喜欢的名字),用命令打开文件夹,也就是cd+文件路径: 使用django-admin的命令创建一个项目,命名为firstsite(或者你喜欢的名字)。 在最开始创建的root文件夹中,会得到一个这样结构的一堆文件
Django快速开发实战】(30~51)使用Django创建一个基础应用:职位管理系统
Season CSDN博客
11-30 4926
30 | 遗留系统集成:为已有系统数据库生成管理后台 流程说明:为已有数据库生成管理后台 创建项目和应用 创建新项目 django-admin startproject empmanager 创建新应用 django-admin startapp candidates 编辑settings.py的数据库配置 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME':
Python Django项目实例一
MEDOUDOU的博客
12-23 1006
Python Django项目实例 电子商务平台 项目功能 实现登录,注册,前端显示商品信息功能,加入购物车功能,以及购买功能,查看历史订单,强制登录等功能 后台处理登录方法 def login(request):#用户登录方法 if request.method == 'GET': response = HttpResponseRedirect('landing') ...
python可视化——django驾驶舱的实现
07-27
7. 创建URL路由:在Django项目的URL配置中添加一个路由,将用户请求与创建的视图函数关联起来。 8. 运行项目:运行Django项目,并访问包含可视化图表的页面。 通过按照上述步骤进行操作,你可以在Django项目中实现...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • Python详细知识体系总结(2021版) 161230
  • Python基础——零基础学Python 35252
  • url地址解码乱码 15501
  • Python基础——程序设计与数据结构 13335
  • 在Pycharm中选择合适的运行环境 8535

分类专栏

  • Python知识体系 11篇
  • Python编程练习 3篇
  • Python全栈笔记 16篇
  • Python基础 15篇
  • Python爬虫 2篇
  • 面试 1篇
  • 工具 5篇
  • PythonFAQ 25篇
  • Mysql 1篇

最新评论

  • Python后台开发——Django高级与项目实战

    一名不想学习的学渣: 真的是太棒了表情包

  • Python推荐系统——冷启动原理与项目实战

    清荷听雨326: 可以分享一下数据集吗

  • sklearn库中找不到Imputer包问题

    m0_72314897: 在哪里改

  • Python详细知识体系总结(2021版)

    爱学习的小罗伯特: 感谢博主的无私分享,人生苦短 我用Python,刚开始学 有一起的做个伴 我建了一个扣裙 217898532可以进来一起交流 资源共享

  • Python详细知识体系总结(2021版)

    Python661: 有需要Python相关资料的加企鹅交流群:217898525

大家在看

  • 132文章解读与程序——中 国 电 机 工 程 学 报EI\CSCD\北大核心《基于博弈论的多微电网系统交易模式研究》已提供下载资源
  • 树莓派和STM32的区别
  • Sounds Good - Easy Optimized Audio Manager
  • ORION Space Scene Generation Framework
  • Spark SQL的基本使用和操作

最新文章

  • 【Python编程练习】条件判断练习:门票价格
  • 【Python编程练习】字符串格式化
  • 【Python编程练习】读取一个Json文件的数据导出成csv文件
2021年9篇
2020年60篇

目录

目录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司商洛百度竞价包年推广价格通化优化报价张北建网站价格揭阳至尊标王宜昌seo优化价格临沂网站优化按天收费多少钱仙桃网站关键词优化推荐镇江网站优化按天扣费推荐商丘网站seo优化推荐坑梓SEO按天扣费海西百度竞价多少钱光明网站优化排名公司天津网站优化按天收费报价石家庄百度网站优化排名报价文山网站推广方案台州网站排名优化价格渭南百度网站优化推荐榆林百度关键词包年推广多少钱临猗网站seo优化推荐临沧网站优化按天扣费公司仙桃网站优化按天扣费报价昭通关键词排名公司呼和浩特百姓网标王哪家好湘潭企业网站建设哪家好凉山英文网站建设价格坪地优化报价定西SEO按天扣费公司垦利网站关键词优化推荐枣庄营销型网站建设烟台优化推荐歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化