全教育培训行业第三方平台平台就业机构
扫码试听
扫码试听
Q:2638333071
首页 > 课程问答 > > Django框架中为什么要使用实例命名空间(django模型提供了哪些常用的数据类型?)
行业动态 行业问答 课程问答 零基础学习 就业前景 技术干货

Django框架中为什么要使用实例命名空间(django模型提供了哪些常用的数据类型?)

发布时间:3 个 月 前 栏目:课程问答 浏览:

1、Django框架中为什么要使用实例命名空间

在 Django 框架中,实例命名空间是指为了避免 URL 命名冲突而给 URL 模式分配独立的命名空间。它能够让不同的应用程序之间以及同一应用程序的不同部分之间保持 URL 命名的唯一性,从而防止在 URL 映射到视图函数时产生的冲突。

使用实例命名空间可以让我们更加灵活地配置 URL,在应用程序中可以使用多个具有相同名称的 URL 模式,但是它们都在不同的命名空间中,因此不会造成冲突。另外,实例命名空间还可以方便地定义反向 URL,即根据 URL 名称生成 URL。

举个例子,假设我们有一个博客应用程序,它包含了一个名为 post 的视图函数。该函数用于显示具体的博客文章。为了确保这个视图函数的 URL 命名唯一性,我们可以将 app_name 设置为 blog,然后在 URL 模式中使用 namespace 参数指定实例命名空间,如下所示:

在上面的例子中,我们使用了 include 函数来将应用程序的 URL 包含到主 URL 中。同时,在 include 函数中使用了 namespace 参数来指定实例命名空间。这样就可以在主 URL 中访问应用程序的 URL 了,而且它们都有独立的命名空间。

Django框架中为什么要使用实例命名空间

2、如何使用django session

Django 完全支持匿名 Session。 Session 框架允许每一个用户保存并取回数据。它将数据保存在服务器端,并将发送和接收 Cookie 的操作包装起来。在 Cookie 中包含的是 Session ID,而不是数据本身。

启用 Sessions?

Session 是通过 中间件 的方式实现的。

要启用 Session 的功能,需要完成以下步骤:

Changed in Django 1.0: 如果你并未使用数据库存储 Session,则此步骤可以忽略;参考 配置 Session 引擎 。

配置 Session 引擎?

缺省情况下,Django 将 Session 存储在数据库中 (使用模型 django.contrib.sessions.models.Session)。尽管这很方便,但在某些情况下,把 Session 放在其它的地方速度会更快。因此 Django 允许您通过配置让它将 Session 数据保存在文件系统或缓冲区中。

使用基于文件的 Session?

要使用基于文件的 Session,请将 SESSION_ENGINE 设置为 "django.contrib.sessions.backends.file" 。

您可能还需要修改 SESSION_FILE_PATH 这一设置以便控制 Django 存储 Session 文件的位置,缺省情况下,它使用 tempfile.gettempdir() ,通常是 /tmp 。

使用基于缓冲区的 Session?

要使用 Django 的缓冲区系统来保存 Session,需要将 SESSION_ENGINE 设置为 "django.contrib.sessions.backends.cache" 。您必须确保您已经配置了缓冲区,详情请参考 缓冲区文档 。

只有在使用 Memcached 作为缓冲后台时,才能使用基于缓冲区的 Session。因为以本地内存作为缓冲后台时,它存储缓冲数据的时间太短了,这样直接访问文件或数据库的速度,要比通过缓冲区访问文件或数据库的速度更快一些。

在视图中使用 Session?

在开启 SessionMiddleware 后,每一个 HttpRequest 对象 (Django 视图函数的第一个参数) 救火有一个 session 属性,它是一个类字典对象。您可以直接对其读写。

Session 对象有以下标准字典函数:

New in Django 1.0: setdefault() 和 clear() 是在这个版本新加的。

它还有如下方法:

从数据库中删除当前的 Session 数据并且重新生成一个 Session 键,并将其发送给浏览器。这用于需要确保 Session 数据无法再从用户浏览器访问时,譬如调用 django.contrib.auth.logout() 时。

设定检测 Cookie 以检验用户的浏览器是否支持 Cookie。因 Cookie 的工作方式,在下一次用户请求之前,您都无法得到测试结果。详情参考下面的 设置检测 Cookie 。

判断用户的浏览器是否收到了检测 Cookie,并返回 True 或 False 。因 Cookie 的工作方式,您必须在之前的独立请求中调用 set_test_cookie() 。详情参考下面的 设置检测 Cookie 。

删除检测 Cookie,请自己调用此函数以便清除该 Cookie。

设定 Session 的过期时间。您可以提供下述几种形式的值:

如果 value 是整形,则它表示的是秒。例如,调用 request.session.set_expiry(300) 会让 Session 在五分钟后过期。

如果 value 是 datetime 或 timedelta 对象,则 Session 将会在相应的日期或时间点过期。

如果 value is 0 ,则用户的 Session 会在浏览器关闭时过期。

如果 value is None ,则 Session 会使用全局策略来设定过期时间。

获得此 Session 的过期时间。对于没有自定义过期时间的 Session (或在浏览器关闭时过期的 Session),此函数返回值与 settings.SESSION_COOKIE_AGE 相同。

获得此 Session 的过期时间点。对于没有自定义过期时间的 Session (或在浏览器关闭时过期的 Session),此函数的返回值等于从现在到时间点 settings.SESSION_COOKIE_AGE 的秒数。

返回 Session 是否会在浏览器关闭时过期,返回值为 True 或 False 。

您在视图中的任何位置都可以修改 request.session ,改多少次都行。

Session 对象指南?

直接在 request.session 上使用 Python 字符串作为字典的键,这比使用 Session 对象的方法来得更直接。

在 Session 字典中,以下划线开始的键,是保留给 Django 在内部使用的。

不要用一个新的对象覆盖 request.session ,也不要访问或修改它的属性,它只能作为一个类字典对象使用。

例子?

这个简单的视图在用户提交了评价信息后,将变量 has_commented 设定为 True ,这样就可以防止用户多次提交评价信息:

这个简单的视图让网站的“用户”登录:

...与上面的例子相对应的,下面的例子则让用户退出:

实际上标准的 django.contrib.auth.logout() 还会多做一些事情从而防止因疏忽造成的数据泄露。它会调用 request.session.flush() 函数。我们使用这些例子只是演示如何操作 Session 对象,它可不是一个完整的 logout() 实现。

设置检测 Cookie?

为方便起见,Django 提供了一种简单的方法来检测用户的浏览器是否支持 Cookie。只要在一个请求中调用 request.session.set_test_cookie() 并在后续请求中调用 request.session.test_cookie_worked() 即可。注意千万不要在同一次请求中同时调用。

之所以要在两次请求中调用 set_test_cookie() 和 test_cookie_worked() 是因为 Cookie 的工作模式。当您设定了 Cookie 后,再下一次请求前,都是没有办法知道浏览器是否会接收它的。

另外最好在测试完毕后,使用 delete_test_cookie() 清除测试用数据。

以下是一个典型的例子:

在视图外使用 Session?

有一个 API 专门用于在视图之外操作 Session 数据:

如果您使用了 django.contrib.sessions.backends.db 后台,则每一个 Session 都是一个普通的 Django 模型。模型 Session 在文件 django/contrib/sessions/models.py 中定义。由于它是一个普通的模型,因此您可以使用 Django 的数据库编程接口直接访问它:

注意,要获得 Session 字典,需要调用 get_decoded() ,这是因为字典是以编码的方式存储的:

Session 是何时存储的?

缺省情况下,Django 只在 Session 被修改时才会保存它,即只有字典中的值被修改或删除时:

对于在上面的最后一个,通过显示地设定 Session 对象的 modified 属性,可以通知 Session 对象它被修改了:

要改变这种行为,可以将 SESSION_SAVE_EVERY_REQUEST 设定为 True 。如果 SESSION_SAVE_EVERY_REQUEST 是 True ,则 Django 在每一次独立的请求之后都会保存 Session。

注意,只有在创建或修改 Session 的时候才会送出 Session Cookie,如果 SESSION_SAVE_EVERY_REQUEST 为 True ,则每次请求都会送出 Cookie。

同样地,在送出 Cookie 时,它的 expires 部分每次都会被更新。

与浏览器同步的 Session 和持久的 Session?

通过设置 SESSION_EXPIRE_AT_BROWSER_CLOSE ,您可以控制 Session 框架使用与浏览器同步的 Session 或持久的 Session。

缺省情况下, SESSION_EXPIRE_AT_BROWSER_CLOSE 的值为 False ,这表示 Session Cookie 将会保存在用户的浏览器中,直到超过了 SESSION_COOKIE_AGE 。如果您希望用户不必在每次关闭浏览器后都重新登陆,请使用这种方式。

如果 SESSION_EXPIRE_AT_BROWSER_CLOSE 设定为 True ,则 Django 会使用与浏览器同步的 Cookie,即用户关闭浏览器时 Cookie 就会过期。如果您希望用户每次打开浏览器都必须登录,请使用这种模式。

这个设置具有全局的缺省值,但可以通过调用 request.session.set_expiry() 为每个 Session 设定独立的值,相关内容在上述的 在视图中使用 Session 中有所阐述。

清空 Session 表格?

注意,Session 数据有可能堆积在数据库表格 django_session 中,Django 不提供 自动清除它们的功能。它把定期清空 Session 数据的任务留给了您。

要理解这个问题,想像一下用户使用 Session 时会发生什么。当用户登录,Django 向表格 django_session 中添加一条记录。每当 Session 数据变化时,Django 会更新这条记录。如果用户手工退出了,Django 会删除它。但是,如果用户 没有 退出,则这条记录永远都不会被删除。

Django 提供了一个能够完成清除功能的样例脚本 django-admin.py cleanup ,它从 Session 表格中删除那些 expire_date 已经过期的记录,但是您的应用程序可能会有其它的需求。

设置?

一些 Django 设置 可以帮助您控制 Session 的行为:

缺省值: django.contrib.sessions.backends.db

控制 Django 在何处保存 Session 数据,合法的值为:

详情请参考 配置 Session 引擎 。

缺省值: /tmp/

如果您使用基于文件的 Session 存储,则此变量控制着 Django 存储 Session 数据的目录。

缺省值: 1209600 (两周,以秒表示)

Session Cookie 的过期时间,以秒表示

缺省值: None

Session Cookie 的域。如果是要设定跨域的 Cookie,可以将其设定为 ".lawrence.com" 的形式,否则请使用 None 。

Session 所使用的 Cookie 的名称,可根据需要设定。

缺省值: False

对于 Session Cookie,是否要使用安全模式。如果将此设定为 True ,则 Cookie 将会被标记为“安全”,这种情况下,浏览器就需要确定该 Cookie 是否是通过 HTTPS 连接发送的。

缺省值: False

是否当用户关闭浏览器时就让 Session 过期。详情参考上文 与浏览器同步的 Session 和持久的Session 。

缺省值: False

是否在每次请求时都保存 Session 数据。如果此项为 False (缺省值),则 Session 数据只有在它被修改后才会保存,即它的字典值被赋值或删除时。

技术细节?

Session 字典可以接受任何与 pickle 兼容的 Python 对象,详情参考 pickle 模块 。

Session 数据存储在数据库表格 django_session 中。

Django 只在需要的时候才发送 Cookie,如果您没有设定任何的 Session 数据,它不会送出 Cookie。

URL 中的 Session ID?

Django 的 Session 框架是完全基于 Cookie 的,并且它也只能基于 Cookie。它不会像一些软件(譬如 PHP)那样在 Session 不能正常工作时,把 Session ID 放到 URL 中。作出这一决定是经过深思熟虑的,那种方法不仅使得 URL 很丑陋,并且 Session ID 还有可能通过 “Referer” 头泄漏出去,从而给网站带来安全隐患。

Django框架中为什么要使用实例命名空间

3、python后端开发需要学什么

可以参考下面的路径去学习,祝你学有所成,公司最近在人工智能和自然语言处理的项目后端项目,我也是网上找了很多知识,最后给自己列了一个学习的目录,按照这个在复习并在总结,希望能帮到你:

计算机基本认知,环境搭建 python环境搭建

计算机基本认识,进制转换

python注释使用

python变量使用

python数据类型_Number

python数据类型 str字符串类型

容器类型数据list,tuple,str

容器类型数据set,dict

变量缓存机制

自动类型转换

Number强制类型转换

python运算符的使用 容器类型数据强制类型转换

字典强转等长二级容器

运算符_算数_比较

运算符_赋值_成员

运算符_身份_逻辑

运算符_位运算_优先级

python流程控制 代码块

流程控制if

多项巢状分支

循环结构while

循环判断经典题

字符串的相关操作

python循环结构

关键字continue_break_pass

for循环的遍历_range

字符串,列表内置方法

字符串函数

format字符串格式化

format特殊符号的使用

列表的操作

列表函数

字典,集合内置方法+文件操作

字典的相关函数

集合操作_函数

文件操作

文件加号模式

函数,函数参数 文件相关函数

函数

形参实参

默认形参_关键字形参

收集参数

命名关键字参数

全局/局部变量,闭包 return返回值

函数名的使用

局部变量_全局变量

函数的嵌套LEGB

关键字nonlocal

闭包函数

递归,匿名函数

locals和globals

闭包特点意义

递归含义

斐波那契_尾递归

匿名函数lambda

迭代器,高阶函数 迭代器

高阶函数_map

高阶函数_reduce

高阶函数_sorted

高阶函数_filter

推导式 列表推导式

推导式题

集合_字典推导式

生成器表达式

生成器函数

内置方法,linux基本命令 内置函数

可滑动序列

面试题演练

linux安装

linux基本命令

python模块 序列化模块

数学模块

随机模块

time模块

python模块 os模块

os_shutil

os.path模块

计算文件夹大小

zipfile

tarfile

导入模块包,oop面向对象认知

import_from绝对导入

import_from相对导入(单入口)

oop面向对象

类的封装性

oop之封装,继承 类的相关操作

对象和类的删除操作

单继承

多继承

菱形继承

oop之多态,魔术方法 多态

魔术方法__new__

单态模式

析构方法__del__

oop之魔术方法,异常处理 魔术方法__call__

魔术方法__str__repr__

魔术方法__bool_add_len__

了解异常

异常处理语法

主动抛出异常

装饰器

装饰器

静态绑定方法

property

正则表达式 单个字符匹配

多个字符匹配

匹配分组

命名分组

正则函数

正则计算器小程序

认识网络 bs_cs流程

传输数据流程

交换机和局域网的网络通讯

arp协议

认识tcp/udp协议

tcp基本语法

tcp循环发消息

udp基本语法

udp循环发消息

黏包

基于tcp协议下的应用 socketserver并发

文件校验

服务器合法性校验

tcp登录

并发编程之进程 进程

join

守护进程

lock锁

Semaphore

生产者消费者模型 Event事件

进程队列Queue

生产者和消费者模型

JoinableQueue

Manager.py

并发编程之线程

.线程

用类定义线程

守护线程

lock保证线程数据安全

信号量_Semaphore

死锁,互斥锁,递归锁

线程池,进程池,协成的使用

事件Event

线程队列

进程池和线程池

回调函数

协程

协程的爬虫案例

mysql安装(linux+windows+xshell+navicat)

掌握数据库mysql基本操作

mysql登录,服务启动

创建账户,用户授权

数据库,数据表,数据的增删改查

认识常用数据类型

数据库的存储引擎和约束

字段约束

约束的删减

存储引擎区别用法

数据表之间的关系

查询数据表

单表查询

多表联查

子查询

带EXISTS关键字的子查询

python操作mysql

python连接mysql的事务处理

sql注入

python连接mysql增删改查

mysql数据恢复

HTML/CSS html文档介绍,html标签,body标签,head标签介绍,head标签中的meta标签和link标签和title标签介绍,body中的标签分类,基础标签,img、a、列表、表格、input、label、select等标签,作业讲解,form标签介绍和示例讲解,css介绍,引入,css选择器,背景设置,高度宽度,字体效果,边框、盒子模型、display属性、float属性等

CSS 伪类选择器,文字装饰、a标签补充、定位、权重、小米商城导航栏讲解,原型头像示例讲解

JS基础/BOM和DOM操作 小米商城作业,js介绍和js引入,js数据类型、流程控制、函数等操作,js中的JSON,BOM对象的弹框、location对象、定时器、直接查找选择器、间接查找选择器、值操作、类值操作、样式操作、button按钮补充、事件和绑定事件的两种方式,常用事件练习

jQuery/Bootstrap 作业讲解,jquery介绍,引入、选择器、筛选器、值操作、文档操作、删除和清空标签、逻辑运算符、克隆、事件冒泡和事件委托、绑定事件的方式,作业讲解和模态对话框示例,input事件和页面载入事件补充、bootstrap介绍和引入、全局css样式、组件和常用插件

自定义web框架 作业讲解、web框架介绍、自定义web框架实现、动态页面、返回不同的html页面、函数版、多线程版、返回静态文件版,wsgiref版等web框架通过socket来实现,还有jinja2的简单使用

django下载安装和URL路由系统 django介绍、MTV和MVC框架介绍、常用指令、目录结构、pycharm创建django项目、request的常用属性介绍、登录示例、url路由系统介绍、有名分组和无名分组,

视图/模板 request对象的常用方法和属性、响应方法介绍和使用,CBV和FBV、CBV和FBV加装饰器,CBV源码讲解,模板渲染系统介绍,语法、简单示例、内置过滤器、for循环标签、if标签、with标签、自定义过滤器和标签、模板继承等

Dajngo的ORM(1) orm介绍,数据库同步指令使用和流程分析、配置连接mysql模型类中的属性介绍和常用参数说明,创建表和数据、增加的两种方法、删除、更新的两种方法、查询的13个api接口

Dajngo的ORM(2) 单表图书管理系统展示和添加作业讲解、choices属性、auto_now_add和auto_now参数讲解、url别名和反向解析,基于双下划线的模糊查询,多表结构介绍,图书管理系统编辑和删除作业讲解、多表关系模型类创建和字段说明和参数介绍、多表数据的添加操作,多表的删除和修改、基于对象的跨表查询、双下划线跨表查询、查看原生sql语句的方法、聚合查询、分组查询、F查询、Q查询等

Ajax与Django/ 中间件 ajax的介绍和简单示例,ajax登录示例、列表数据展示示例,ajax操作cookie的补充、中间件介绍、自定义中间件的方法、5个中间件方法的介绍和使用、基于中间件的session登录认证

cookie、session以及用户认证组件 cookie介绍,cookie的流程解析,django操作cookie和其他参数介绍、session的说明、django的session操作等,多表图书管理系统作业讲解

vue初识、es6基本语法、指令系统 let、const、v-if、v-for、v-html、v-text、v-model、v-show、生命周期钩子函数、

组件化开发、组件传值、axios简单使用 组件化开发、组件传值、axios简单使用、vue-router使用、vue-cli安装

项目初始化/首页 项目介绍、创建、初始化、element-ui的使用,单文件组件的使用和axios在单文件中的使用和配置、vue-cli的介绍和使用、路飞项目顶部导航栏页面效果搭建,轮播图组件的使用和调整、购物车页面搭建和课程详情页面搭建,vue-video-player视频播放插件

drf组件 序列化器、drf简单示例、restful规范、反序列化的校验机制

drf组件 apiview、request和response对象、modelserializer、序列化器保存数据、read_only和write_only的参数

drf组件 viewset、drf路由功能、viewset视图基类的使用、视图子类、通用视图类genericapiview/排序、django-filter过滤器、频率组件、分页组件、接口文档、异常处理、xadmin的安装和使用、认证组件和权限组件

git、消息队列 git企业中的使用模式,rabbimq消息队列的应用

rpc通信,grpc组件 rpc的概念以及通信模式,最火的grpc组件使用

轻量级Flask框架 Werkzeug服务介绍、Flask框架介绍

路由系统、自定义路由扩展

Cookie、Session、Http请求和响应

蓝图、消息闪现、中间件

Flask常用扩展、WTForms、使用SQLAchemy ORM

Admin、Restful、websocket原理、magic string, payload len,masking key

请求和上下文、多app应用、离线脚本、自定义扩展

服务端项目搭建,项目配置(session、数据库、日志相关),项目初始化

jsonrpc模块基本配置和使用,客户端展示首页及登录注册叶绵,APICloud页面控制管理

python进阶 并发、同步、异步、锁,线进程概念以及协程实现原理

mysql进阶课 基础知识梳理、索引、执行计划

mysql进阶课 存储引擎、日志管理、备份恢复、主从赋值、优化

redis,mongodb 事务和发布订阅、RDB和AOF持久化、缓存击穿、缓存雪崩等原理介绍、 用户管理和复制集(RS)总结、sharding cluster 分片集群的搭建、分片使用和相关策略等

算法与设计模式 链表、二叉树、常见算法、二分查找、插入排序、希尔排序、快排、堆排序、哈希查找

算法与设计模式 设计模式,单例模式、工厂模式、策略模式、观察者模式

算法与设计模式 leetcode经典算法解析

知识体系差不多就这么多了,再就是项目部分,具体项目要看需求了,学会了钓鱼的方法,不怕钓不到鱼哦,无论在哪个行业做什么样的项目都没问题呢!

我自己也搜集了一些经典的资料,要是想要加我百度网盘:艾美电商,我发给你!

4、谁有 《跟老齐学Python_Django实战》,帮帮我找一下这教材

我这里有您想要的资源,通过百度网盘免费分享给您:

https://pan.baidu.com/s/1TCsITcDNfEmYSybV30UNCg

提取码:1234

《跟老齐学Python:Django实战》是以Python为基础进行Web应用开发的进阶读物。书中以一个实例项目为主线,在实践中边学边做,理论联系实际。每节都配有思维导图,使读者对项目需求一目了然;每章都有知识点和文档导读,引导读者“知其所以然”。相信认真阅读本书的读者,不仅能够得到“鱼”,更能得到“渔”,从而具备独立开发的能力。《跟老齐学Python:Django实战》适合已经具有Python基础技能、进行Web应用开发的读者。如有此意愿,但尚缺乏Python基础技能者,推荐阅读《跟老齐学Python:轻松入门》。

上一篇:没有了
技术干货
零基础学习
行业多年深耕,从这报名,学费立减800
  • 岳同学180****1241刚刚成功领取
  • 胡同学134****6431刚刚成功领取
  • 李同学150****6122刚刚成功领取
  • 张同学136****2231刚刚成功领取
  • 孙同学178****5521刚刚成功领取
  • 齐同学156****7788刚刚成功领取
猜你喜欢
查看更多
相关推荐
查看更多
现在学习,我的薪资能达到多少?
立即报名

联系我们:

Q:2638333071

鄂ICP备2023015464号