Django 代码是什么样子?
MTV设计模式
先说什么是设计模式,这其实是一种思想,提供了组织业务逻辑的方向。
设计模式都是前人经过千锤百炼总结出来的套路,他并不是具体的代码,而是设计过程中考虑问题的思路。
MTV是Model、Template、View三个单词的简写,分别代表模型、模板、视图。
- 模型(Model),即数据存取层,处理与数据相关的所有事务:如何存取、如何验证有效性、数据之间的关系等。
- 模板(Template),即视图表现层,处理与视图相关的内容:如何在页面或其它类型文档中进行显示。
- 视图(View),即业务逻辑层,存取模型及调用恰当的模板,是模型与模板之间的桥梁。
除了以上这三层之外,还需要一个URL控制器,将一个个URL的页面请求分发给不同的View处理,然后View再调用相应的Model和Template。
MTV的响应模式如图所示:
在传统的数据驱动网站中,Web应用程序会等待来自Web浏览器或其他客户端的HTTP请求。当Django接收到请求时,应用程序根据URL和可能的POST数据或GET数据中的信息确定需要的内容。根据需要,可以从数据库读取或写入信息,或执行满足请求所需的其他任务。然后,该应用程序将返回给Web浏览器或客户端响应。
Django 网络应用程序通常将处理每个步骤的代码分组到单独的文件中:
- URLs:虽然可以通过单个功能来处理来自每个URL的请求,但是编写单独的视图函数来处理每个资源是更加可维护的。URL控制器用于根据请求URL将HTTP请求重定向到相应的视图,还可以匹配出现在URL中的字符串或数字,并将其作为数据传递给视图函数。
- View: 视图是一个请求处理函数,它接收HTTP请求并返回HTTP响应。视图通过模型访问满足请求所需的数据,并将响应的格式委托给模板。
- Models: 模型是定义应用程序数据结构的Python对象,并提供在数据库中增、删、改、查记录的机制。
- Templates: 模板是定义文件(例如HTML页面)的结构或布局的文本文件,用于表示实际内容的占位符。一个视图可以使用HTML模板,从数据填充它动态地创建一个HTML页面模型。可以使用模板来定义任何类型的文件的结构;它不一定是HTML!
URL控制器(urls.py)
URL控制器通常存储在名为urls.py的文件中。在下面的示例中,urlpatterns定义了特定URL模式和相应视图函数之间的映射列表。如果接收到具有与指定模式匹配的URL(例如r'^$',下面)的HTTP请求,则将调用相关联的视图功能(例如views.index)并传递请求。
urlpatterns = [
path('admin/', admin.site.urls),
path('book/<int:id>/', views.book_detail, name='book_detail'),
path('catalog/', include('catalog.urls')),
re_path(r'^([0-9]+)/$', views.best),
]
两种方法的第一个参数,是将要匹配的路由(模式)。 path()方法使用尖括号,来定义将被捕获、并作为命名参数传递给视图函数的URL的部分。 re_path()函数使用灵活的模式匹配方法,称为正则表达式。
第二个参数,是在匹配模式时将调用的另一个函数。注释views.book_detail表示该函数名为book_detail(),可以在名为views的模块中找到(即在名为views.py的文件中)
处理请求(views.py)
视图是Web应用程序的核心,从Web客户端接收HTTP请求并返回HTTP响应。在两者之间,通过Django框架编写视图函数处理资源、访问数据库和渲染模板等。
定义数据模型(models.py)
Django Web应用程序,通过被称为模型的Python对象,来管理和查询数据。模型定义存储数据的结构,包括字段类型以及字段可能的最大值,默认值,选择列表选项,帮助文本,表单的标签文本等。模型的定义与底层数据库无关,一旦您选择了要使用的数据库,您就不需要直接与之交互,而是编写模型结构和其他代码,Django可以处理与数据库通信的所有辛苦的工作。
查询数据(views.py)
Django模型提供了一个,用于搜索数据库的简单查询API。这可以使用不同的标准(例如,精确,不区分大小写,大于等等)来匹配多个字段,并且可以支持复杂语句。
呈现数据(HTML模版)
模板系统允许您使用占位符指定输出文档的结构,以便在生成页面时填充数据。模板通常用于创建HTML,但也可以创建其他类型的文档。Django支持其本机模板系统,和另一个流行的Python库,名为Jinja2。
Django能做什么
前面的部分,展示了几乎每个Web应用程序将使用的主要功能:URL映射,视图,模型和模版。Django还提供了其他内容,包括:
- 表单 : HTML表单用于收集用户数据,以便在服务器上进行处理。Django简化了表单创建,验证和处理。
- 用户身份验证和权限 : Django包含了一个强大的用户身份验证和权限系统。
- 缓存 :与提供静态内容相比,动态创建内容需要更强大的计算强度。Django提供灵活的缓存,如无必要,不会重新加载网页。
- 管理网站 :当你使用Django创建应用时,就已经默认包含了一个Django管理站点。通过它可以十分轻松地创建一个管理页面,使网站管理员能够创建、编辑和查看站点中的数据模型。
- 序列化数据 : Django可以轻松地将数据序列化,并支持XML或JSON格式。这会有助于使用Django创建一个Web服务,或是创建一个在客户端进行代码处理、和呈现所有数据的网站。
Django面试题
什么是Django框架?(初级)
Django是一个开放源代码的Web应用框架,由Python写成。采用了MTV的框架模式。
Django对web开发有哪些优势?(初级) 功能完善、要素齐全:该有的、可以没有的都有,自带大量常用工具和框架,无须你自定义、组合、增删及修改。
完善的文档:经过十多年的发展和完善,Django有广泛的实践案例和完善的在线文档。开发者遇到问题时可以搜索在线文档寻求解决方案。
强大的数据库访问组件:Django的Model层自带数据库ORM组件,使得开发者无须学习其他数据库访问技术(SQL、pymysql、SQLALchemy等)。
灵活的URL映射:Django使用正则表达式管理URL映射,灵活性高。新版的2.0,进一步提高了URL编写的优雅性。
丰富的Template模板语言:类似jinjia模板语言,不但原生功能丰富,还可以自定义模板标签,并且与其ORM的用法非常相似。
自带后台管理系统admin:只需要通过简单的几行配置和代码就可以实现一个完整的后台数据管理控制平台。
完整的错误信息提示:在开发调试过程中如果出现运行错误或者异常,Django可以提供非常完整的错误信息帮助定位问题。