12 2019 档案
摘要:查询操作 查找是数据库操作中一个非常重要的技术。查询一般就是使用 filter 、 exclude 以及 get 三个方法来实现。我们可以在调用这些方法的时候传递不同的参数来实现查询需求。在 ORM 层面,这、些查询条件都是使用 field + __ + condition 的方式来使用的。以下将那
阅读全文
摘要:表关系之多对多场景: 1、应用场景:比如文章和标签的关系。一篇文章可以有多个标签,一个标签可以被多个文章所引用。因此标签和文章的关系是典型的多对多的关。2、实现方式:Django 为这种多对多的实现提供了专门的 Field 。叫做 ManyToManyField 。还是拿文章和标签为例进行讲解。 示
阅读全文
摘要:表关系之一对一应用场景: 比如一个用户表和一个用户信息表。在实际网站中,可能需要保存用户的许多信息,但是有些信息是不经常用的。如果把所有信息都存放到一张表中可能会影响查询效率,因此可以把用户的一些不常用的信息存放到另外一张表中我们叫做UserInfo。但是用户表User和用户信息表UserInfo就
阅读全文
摘要:表关系:表之间的关系都是通过外键来进行关联的。而表之间的关系,无非就是三种关系:一对一、一对多(多对一)、多对多等。以下将讨论一下三种关系的应用场景及其实现方式。 一对多:1. 应用场景:比如文章和作者之间的关系。一个文章只能由一个作者编写,但是一个作者可以写多篇文章。文章和作者之间的关系就是典型的
阅读全文
摘要:外键删除操作: 如果一个模型使用了外键。那么在对方那个模型被删掉后,该进行什么样的操作。可以通过 on_delete 来指定。可以指定的类型如下:1、CASCADE :级联操作。如果外键对应的那条数据被删除了,那么这条数据也会被删除。2、PROTECT :受保护。即只要这条数据引用了外键的那条数据,
阅读全文
摘要:外键:在 MySQL 中,表有两种引擎,一种是 InnoDB ,另外一种是 myisam 。如果使用的是 InnoDB 引擎,是支持外键约束的。外键的存在使得 ORM 框架在处理表关系的时候异常的强大。因此这里我们首先来介绍下外键在 Django 中的使用。 类定义为 class ForeignKe
阅读全文
摘要:模型中 Meta 配置: 对于一些模型级别的配置。我们可以在模型中定义一个类,叫做 Meta 。然后在这个类中添加一些类属性来控制模型的作用。比如我们想要在数据库映射的时候使用自己指定的表名,而不是使用模型的名称。那么我们可以在 Meta 类中添加一个 db_table 的属性。示例代码如下: cl
阅读全文
摘要:Field的常用参数: null: 如果设置为 True , Django 将会在映射表的时候指定是否为空。默认是为 False 。在使用字符串相关的 Field (CharField/TextField)的时候,官方推荐尽量不要使用这个参数,也就是保持默认值 False 。因为 Django 在处
阅读全文
摘要:EmailField:类似于 CharField 。在数据库底层也是一个 varchar 类型。最大长度是254个字符; FileField:用来存储文件的。这个请参考后面的文件上传章节部分; ImageField:用来存储图片文件的。这个请参考后面的图片上传章节部分; FloatField:浮点类
阅读全文
摘要:django.utils.timezone.now方法: 会根据settings.py中是否设置了USE_TZ=True获取当前的时间。如果设置了,那么就获取一个aware类型的UTC时间。如果没有设置,那么就会获取一个navie类型的时间。 django.utils.timezone.localt
阅读全文
摘要:navie时间和aware时间: 什么是navie时间?什么是aware时间? navie时间:不知道自己的时间表示的是哪个时区的。也就是不知道自己几斤几两。比较幼稚。 aware时间:知道自己的时间表示的是哪个时区的。也就是比较清醒。 pytz库: 专门用来处理时区的库。这个库会经常更新一些时区的
阅读全文
摘要:常用字段: 在 Django 中,定义了一些 Field 来与数据库表中的字段类型来进行映射。以下将介绍那些常用的字段类型。 AutoField: 映射到数据库中是 int 类型,可以有自动增长的特性。一般不需要使用这个类型,如果不指定主键,那么模型会自动的生成一个叫做 id 的自动增长的主键。如果
阅读全文
摘要:ORM对数据库的增删改查基本操作: 创建模型如下: 基本的增删改查如下:
阅读全文
摘要:创建ORM模型: ORM 模型一般都是放在 app 的 models.py 文件中。每个 app 都可以拥有自己的模型。并且如果这个模型想要映射到数据库中,那么这个 app 必须要放在 settings.py 的 INSTALLED_APP 中进行安装。以下是写一个简单的书籍 ORM 模型。示例代码
阅读全文
摘要:ORM模型介绍: 随着项目越来越大,采用写原生SQL的方式在代码中会出现大量的SQL语句,那么问题就出现了: 1、SQL语句重复利用率不高,越复杂的SQL语句条件越多,代码越长。会出现很多相近的SQL语句;2、很多SQL语句是在业务逻辑中拼出来的,如果有数据库需要更改,就要去修改这些逻辑,这会很容易
阅读全文
摘要:这两节开始做个简单的图书管理系统(基于43节课程学的原生Django使用原生SQL操作): 主要实现如下功能:图书查看(包括详情)、添加和删除: 1、创建一个book_manage工程(使用pycharm创建时,同时创建一个APP——cms),url情况: 2、setting.py中静态文件加载,M
阅读全文
摘要:Django使用原生SQL语句操作数据库 Django配置连接数据库: 在操作数据库之前,首先先要连接数据库。这里我们以配置 MySQL 为例来讲解。 Django 连接数据库,不需要单独的创建一个连接对象。只需要在 settings.py 文件中做好数据库相关的配置就可以了。示例代码如下: DAT
阅读全文
摘要:MySQL数据库介绍: 在网站开发中,数据库是网站的重要组成部分。只有提供数据库,数据才能够动态的展示,而不是在网页中显示一个静态的页面。数据库有很多,比如有 SQL Server 、 Oracle 、 PostgreSQL 以及 MySQL 等等。 MySQL 由于价格实惠、简单易用、不受平台限制
阅读全文
摘要:加载静态文件: 在一个网页中,不仅仅只有一个 html 骨架,还需要 css 样式文件, js 执行文件以及一些图片等。因此在 DTL 中加载静态文件是一个必须要解决的问题。在 DTL 中,使用 static 标签来加载静态文件。要使用 static 标签,首先需要 {% load static %
阅读全文
摘要:模版结构优化之继承详解: 在前端页面开发中。有些代码是需要重复使用的。这种情况可以使用 include 标签来实现。也可以使用另外一个比较强大的方式来实现,那就是模版继承。模版继承类似于 Python 中的类,在父类中可以先定义好一些变量和方法,然后在子类中实现。模版继承也可以在父模版中先定义好一些
阅读全文
摘要:引入模版: 有时候一些代码是在许多模版中都用到的。如果我们每次都重复的去拷贝代码那肯定不符合项目的规范。一般我们可以把这些重复性的代码抽取出来,就类似于Python中的函数一样,以后想要使用这些代码的时候,就通过 include 包含进来。这个标签就是 include 。示例代码如下: # head
阅读全文
摘要:自定义时间计算过滤器: 有时候经常会在朋友圈、微博中可以看到一条信息发表的时间,并不是具体的时间,而是距离现在多久。比如 刚刚 , 1分钟前 等。这个功能 DTL 是没有内置这样的过滤器的,因此我们可以自定义一个这样的过滤器。 需求: time距离现在的时间间隔1. 如果时间间隔小于1分钟以内,那么
阅读全文
摘要:Django再牛逼,也不可能满足所有需求,所以自定过滤器成了刚需!!! 自定义过滤器步骤: 1、在某个APP中,创建一个名叫:templatetags 包(这个包名必须是:templatetags ,不然django找不到); 2、在templatetags中创建一个py文件——写自己的过滤器(即:
阅读全文
摘要:slice过滤器: 类似于 Python 中的切片操作。示例代码如下: {{ some_list|slice:"2:" }} 以上代码将会给 some_list 从 2 开始做切片操作。 stringtags过滤器: 删除字符串中所有的 html 标签。示例代码如下: {{ value|stript
阅读全文
摘要:join过滤器: 类似与 Python 中的 join ,将列表/元组/字符串用指定的字符进行拼接。示例代码如下: {{ value|join:"/" }} 如果 value 是等于 ['a','b','c'] ,那么以上代码将输出 a/b/c 。 length过滤器: 获取一个列表/元组/字符串/
阅读全文
摘要:default过滤器: 如果值被评估为 False 。比如 [] , "" , None , {} 等这些在 if 判断中为 False 的值,都会使用 default 过滤器提供的默认值。示例代码如下:{{ value|default:"nothing" }}如果 value 是等于一个空的字符串
阅读全文
摘要:date过滤器: date过滤器:将一个日期按照指定的格式,格式化成字符串。示例代码如下: views.py: from datetime import datetime def cur_date(request): cur_time = datetime.now() return render(r
阅读全文
摘要:为什么需要过滤器: 在DTL中,不支持函数的调用形式‘()’,因此不能给函数传递参数,这将有很大的局限性;而过滤器其实就是一个函数,可以对需要处理的参数进行处理,并且还可以额外接受一个参数(也就是说:最多两个参数); add过滤器: 将传进来的参数添加到原来的值上面。这个过滤器会尝试将 值 和 参数
阅读全文
摘要:verbatim 标签: verbatim 标签:默认在 DTL 模板中是会去解析那些特殊字符的。比如 {% 和 %} 以及 {{ 等。如果你在某个代码片段中不想使用 DTL 的解析引擎。那么你可以把这个代码片段放在 verbatim 标签中。示例代码下: {% verbatim %} {{ Hel
阅读全文
摘要:1、spaceless 标签: spaceless 标签:移除html标签中的空白字符。包括空格、tab键、换行等。示例代码如下: {% spaceless %} <p> <a href="foo/">Foo</a> </p> {% endspaceless %} 那么在渲染完成后,会变成以下的代码
阅读全文
摘要:url标签使用详解: 在模版中,我们经常要写一些 url ,比如某个 a 标签中需要定义 href 属性。当然如果通过硬编码的方式直接将这个 url 写死在里面也是可以的。但是这样对于以后项目维护可能不是一件好事。因此建议使用这种反转的方式来实现,类似于 django 中的 reverse 一样。示
阅读全文
摘要:with标签使用详解: 1、在模板中享用使用变量,可以通过 with 语句实现; 2、with 有两种用法,具体情况如下 ( 包括注意事项 ) : index.html: <p>with第一种用法:</p> {% with name as ni %} <p>{{ ni }}</p> {% endwi
阅读全文
摘要:for标签使用详解: for...in... 标签: for...in... 类似于 Python 中的 for...in... 。可以遍历列表、元组、字符串、字典等一切可以遍历的对象。示例代码如下: {% for person in persons %} <p>{{ person.name }}<
阅读全文
摘要:if标签使用详解: if 标签: if 标签相当于 Python 中的 if 语句,有 elif 和 else 相对应,但是所有的标签都需要用标签符号 {% %} 进行包裹。 if 标签中可以使用 ==、!=、<、<=、>、>=、in、notin、is、is not 等判断运算符。示例代码如下: 一
阅读全文
摘要:模版变量使用: 模板中可以包含变量, Django 在渲染模板的时候,可以传递变量对应的值过去进行替换。变量的命名规范和 Python 非常类似,只能是阿拉伯数字和英文字符以及下划线的组合,不能出现标点符号等特殊字符。变量需要通过视图函数渲染,视图函数在使用 render(或 render_to_s
阅读全文
摘要:模版查找路径配置: 在项目的 settings.py 文件中。有一个 TEMPLATES 配置,这个配置包含了模板引擎的配置,模板查找路径的配置,模板上下文的配置等。模板路径可以在两个地方配置。 1、DIRS :这是一个列表,在这个列表中可以存放所有的模板路径,以后在视图中使用 render (或r
阅读全文
摘要:模板 在之前的章节中,视图函数只是直接返回文本,而在实际生产环境中其实很少这样用,因为实际的页面大多是带有样式的HTML代码,这可以让浏览器渲染出非常漂亮的页面。目前市面上有非常多的模板系统,其中最知名最好用的就是DTL和Jinja2。 DTL 是 Django Template Language
阅读全文
摘要:默认参数的使用: 废话不多说直接上截图吧, 第一步:写两个视图,一个无参,一个有参; 第二步:
阅读全文
摘要:1、实现如下需求:用户可以根据articles/list/方式获取文章,其中文章分类是采用如下分类,实例如下: 第一种:获取python分类下的文章:/article/python/ 第二种:获取python和django分类下的文章:/article/python+django 第三种:获取pyt
阅读全文
摘要:补充reverse两点: 1、如若在反转url时,需要添加参数,那么可以传递 kwargs 参数到 reverse 函数中,实例代码如下: return redirect( reverse('detail', kwargs={"id": '123'}) ) 2、如若想添加查询字符串参数,则必须手动进
阅读全文
摘要:re_path使用: 1、re_path和path的作用是一样的,只不过re_path在写url的时候可以使用正则表达式——功能更加强大; 2、使用正则表达式时,推荐使用原生字符串(即:已 r 开头的字符串); 3、在正则表达式中定义变量,需要使用小括号括起来(例如匹配年份的表达式:(?P<year
阅读全文
摘要:include函数详解(了解——虽然用的很少): include函数的用法,目前有三种使用方式: 1、include(module,namespace=None): module:子url的模块字符串(即:app); namespace:实例命名空间;这个地方要注意一点,如果指定实例命名空间,那么前
阅读全文
摘要:应用命名空间和实例命名空间: 什么是实例命名空间:就是多个url映射到同一个app上,如下代码便是: path('cms1/', include('cms.urls')), path('cms2/', include('cms.urls')), 如下图: 基于上节(应用命名空间——016)的情况会出
阅读全文
摘要:为什么需要URL命名? 主要解决蛋疼url变化情况,比如:哪天项目经理或领导过来说,把login改成signin,把register改成signup等蛋疼的需求——因为一旦改了url后,相关视图函数里的url反转也要修改,假设这样的情况很多,需花费很长的时间调整(我们应该节约这样的时间:回家陪老婆孩
阅读全文
摘要:URLs分层模块化: 经过上面的14节课程,大伙有没有发现一个问题:那就是随着的项目功能模块越来越多,所有url匹配都写在一个urls.py文件中,其结果是:文件长,看着心累——需要分门别类;因此能不能将与某个APP相关url都放到相关app中的urls.py文件中:答案是肯定的; 一般我们会在每个
阅读全文
摘要:Django内置的URL转换器: 上节中我们说了URL中传参的情况,传递参数是通过 <> 尖括号来进行指定的。并且在传递参数的时候,可以指定这个参数的数据类型,比如文章的 id 都是 int 类型,那么可以这样写 <int:id> ,以后匹配的时候,就只会匹配到 id 为 int 类型的 url ,
阅读全文
摘要:URL传参数有两种方式: 1、采用在URL中使用变量的方式:在path的第一个参数中,使用'<参数名>'的方式可以传递参数,然后在对于的视图函数中也要写一个参数,并且视图函数中的参数名和URL中的参数名称必须保持一致,否则没法找到这个参数;另外,在URL中可以传递多个参数,下面是传递两个参数的实例:
阅读全文
摘要:URL映射: 1、为什么Django回去url.py文件中寻找映射呢? 答:应为在项目的setting.py文件中配置了:ROOT_URLCONF变量,此变量中设置为:urls.py 所以django会去urls.py中寻找; 2、在urls.py中所有的映射,都应该放在:urlpatterns变量
阅读全文
摘要:视图: 视图一般都写在 app 的 views.py 中。并且视图的第一个参数永远都是 request (一个HttpRequest)对象。这个对象存储了请求过来的所有信息,包括携带的参数以及一些头部信息等。在视图中,一般是完成逻辑相关的操作。比如这个请求是添加一篇博客,那么可以通过request来
阅读全文
摘要:Debug模式: 1、创建的Django项目默认就开启debug模式,所以以后我们修改了Django项目代码,然后使用Ctrl + s保存;那么Django项目就会自动重启并加载我们修改后台的代码——无需手动重启; 2、开启Django项目debug模式,在开发、测试过程中出现的bug,将在浏览器中
阅读全文
摘要:前戏: 废话少数,先简单的体验一下URL,具体项目文件代码如下: 运行此项目,访问如下地址,返回如下情况,如下图: 这里代码比较少,担当代码稍微多一点,你就能感觉到:所有的代码都写在一个文件里,很没有条理、规范性,更没法看了;所以Django使用功能模块方式管理工程——APP; Django推荐的项
阅读全文
摘要:pycharm运行项目: 使用pycharm运行项目,并运行局域网内部用户访问;主要要修改如下地方(包括修改端口),具体请看下图: 项目结构介绍: manage.py :以后和项目交互基本上都是基于这个文件。一般都是在终端输入 python manage.py [子命令] 。可以输入 python
阅读全文
摘要:创建 Django 项目的方式: 1、命令行方式创建项目和APP: 1.1、创建项目:打开WINDOWS的cmd窗口,使用命令:django-admin startproject [项目名称]即可创建,比如:django-admin startproject first_project 1.2、创建
阅读全文
摘要:Django介绍: Django,发音为[`dʒæŋɡəʊ],Django诞生于2003年秋天,2005年发布正式版本,由Simon和Andrian开发。当时两位作者的老板和记者要他们几天甚至几个小时之内增加新的功能。两人不得已开发了Django这套框架以实现快速开发目的,因此Django生来就是为
阅读全文
摘要:在学习 Django 之前,需要做好以下准备工作: 1. 确保已经安装 Python 3.6 以上的版本,教学以 Python 3.6 版本进行讲解。 2. 安装 virtualenvwrapper ,这个是用来创建虚拟环境的包,使用虚拟环境可以让我们的包管理更加的方便,也为以后项目上线需要安装哪些
阅读全文
摘要:URL是什么 URL 是 Uniform Resource Locator 的简写,统一资源定位符。 一个 URL 由以下几部分组成: scheme://host:port/path/?query-string=xxx#anchor scheme:代表的是访问的协议,一般为 http 或者 http
阅读全文
摘要:为什么要使用:virtualenvwrapper virtualenvwrapper 软件包可以让我们管理虚拟环境变得更加简单。(virtualenv)不用再跑到某个目录下通过 virtualenv 来创建虚拟环境,并且激活的时候也要跑到具体的目录下去激活。 安装 virtualenvwrapper
阅读全文
摘要:前戏: 1、安装python解释器,建议安装时选上添加到系统,具体情况如下图: 2、PyCharm安装就不说了,主要的是安装专业版(社区版没有django、flask等功能,至于破解——你懂的); 安装 virtualenv : virtualenv 是用来创建虚拟环境的软件工具,我们可以通过 pi
阅读全文
摘要:为什么需要虚拟环境: 到目前位置,我们所有的第三方包安装都是直接通过 pip install *** 的方式进行安装的,这样安装会将那个包安装到你的系统级的 Python 环境中。但是这样有一个问题,就是如果你现在用 Django 1.10.x 写了个网站,然后你的领导跟你说,之前有一个旧项目是用
阅读全文
摘要:目录 一、实现方法二、基本原理三、代码样例 方法1:纯模板语言实现 方法2:使用simpletag实现四、其他变化 1.model定义 2.处理函数变化 3.simpletag相应改变 一、实现方法 1.纯模板语言实现 2.自定义simpletag实现(本质是简化了纯模板语言的判断) 二、基本原理
阅读全文
摘要:1、Web本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端。 1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 4 import socket 5 6 7 def hander
阅读全文