django框架之二 --APP,路由系统
Django简介
Django框架简介
MVC框架和MTV框架(了解即可)
MVC,全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller),具有耦合性低、重用性高、生命周期成本低等优点。
想要更详细的了解MVC模式? >> 点我
Django框架的设计模式借鉴了MVC框架的思想,也是分成三部分,来降低各个部分之间的耦合性。
Django框架的不同之处在于它拆分的三部分为:Model(模型)、Template(模板)和View(视图),也就是MTV框架。
Django的MTV模式
Model(模型):负责业务对象与数据库的对象(ORM)
Template(模版):负责如何把页面展示给用户
View(视图):负责业务逻辑,并在适当的时候调用Model和Template
此外,Django还有一个urls分发器,它的作用是将一个个URL的页面请求分发给不同的view处理,view再调用相应的Model和Template
Django框架图示
APP
一个Django项目可以分为很多个APP,用来隔离不同功能模块的代码。
命令行创建
切换到项目目录下
python manage.py startapp app01
使用PyCharm创建
在下方弹出的命令窗口输入:
startapp app01
文件结构
路由系统
URL配置(URLconf)就像Django 所支撑网站的目录。它的本质是URL与要为该URL调用的视图函数之间的映射表。
你就是以这种方式告诉Django,对于这个URL调用这段代码,对于那个URL调用那段代码。
基本格式
from django.conf.urls import url urlpatterns = [ url(正则表达式, views视图函数,参数,别名), ]
注意:
Django 2.0版本中的路由系统已经替换成下面的写法(官方文档):
from django.urls import path urlpatterns = [ path('articles/2003/', views.special_case_2003), path('articles/<int:year>/', views.year_archive), path('articles/<int:year>/<int:month>/', views.month_archive), path('articles/<int:year>/<int:month>/<slug:slug>/', views.article_detail), ]
参数说明
- 正则表达式:一个正则表达式字符串
- views视图函数:一个可调用对象,通常为一个视图函数或一个指定视图函数路径的字符串
- 参数:可选的要传递给视图函数的默认参数(字典形式)
- 别名:一个可选的name参数
正则表达式
注意事项
- urlpatterns中的元素按照书写顺序从上往下逐一匹配正则表达式,一旦匹配成功则不再继续。
- 若要从URL中捕获一个值,只需要在它周围放置一对圆括号(分组匹配)。
- 不需要添加一个前导的反斜杠,因为每个URL 都有。例如,应该是^articles 而不是 ^/articles。
- 每个正则表达式前面的'r' 是可选的但是建议加上。
补充
# 是否开启URL访问地址后面不为/跳转至带有/的路径的配置项 APPEND_SLASH=True
分组命名匹配
用简单的正则表达式分组匹配(通过圆括号)来捕获URL中的值并以位置参数形式传递给视图。
,
在更高级的用法中,可以使用分组命名匹配的正则表达式组来捕获URL中的值并以关键字参数形式传递给视图。
在Python的正则表达式中,分组命名正则表达式组的语法是(?P<name>pattern)
,其中name
是组的名称,pattern
是要匹配的模式。
传递到视图函数views.year_archive()
中的year
参数永远是一个字符串类型。
视图函数中使用默认值
URLconf匹配的位置
URLconf 在请求的URL 上查找,将它当做一个普通的Python 字符串。不包括GET和POST参数以及域名。
接上图
include其他的URLconfs
首先要导入include
from django.conf.urls import include, url #他与url在一起
主文件中的urls
APP中的urls
使用时
使用其他的URLconfs时,主文件匹配的开头,APP匹配的其他部分,只要是以匹配的那个开头的,便交给指定的APP中的urls去处理,
如果导入了多个APP中的urls就需要起别名
看图
下面不行
传递额外的参数给视图函数(了解)
URLconfs 具有一个钩子,让你传递一个Python 字典作为额外的参数传递给视图函数。
浏览器内容
命名URL和URL反向解析
在views函数中简单使用
浏览器中
带参数
有名字的kwargs={}
浏览器中
在模板中使用
语法{% url "url的名字" %}
带参数的{% url "url的名字" arg1 arg2 %} 按顺序用空格隔开
实例
urls
ceshi.html -->可以将他替换进a标签,或者form表单的处理url中,这个参数可以通过后台的render()函数传参
浏览器中
应用
在其他地方使用url时个个位置不必写死,使用reverse("url的名字")来动态的使用
当urls中的url修改时,不必再去别的地方修改
命名空间模式namespace
include请求的不同的URLconfs中的url的name本身是不可以相同的,可以通过设置namespace来生成不同的命名空间
主urls文件
app01中的urls以及函数
app02中的urls以及函数
app01打开的html文件
浏览器结果
/app01/date/
/app02/date/
演示一下没有名称空间的结果
两个url输出相同,