Django必知必会(一)相关配置介绍及动态URL

在这里插入图片描述

一、Django 介绍

在 Web 早期阶段,开发者手动编写每个页面。更新网站要编辑 HTML;重新设计要重新制作每一个网页,而 且一次只能改一个网页。随着网站体量的增大,这种方式立马变得繁琐、浪费时间,最终变得不切实际。

NCSA(National Center for Supercomputing Applications,国家超级计算应用中心,第一款图形 Web 浏览器 Mosaic 就是在这里开发出来的)一群富于创新的黑客解决了这个问题,他们让 Web 服务器派生外部程序, 动态生成 HTML。他们把这一协议称为通用网关接口(Common Gateway Interface,CGI),自此,Web 完全 变了样。如今,很难想象 CGI 带来的变革:CGI 不再把 HTML 页面视作硬盘中存储的文件,而是把页面看 做资源,可以按需动态生成。

CGI 的开发促使了第一代动态网站的出现。然而,CGI 自身也有问题:CGI 脚本包含大量重复的样板代码, 导致代码难以复用,而且新手难以编写和理解。

PHP 解决了这些问题中的多数,在 Web 开发界引起了一阵风暴。PHP 现在是创建动态网站最流行的工具, 多门类似的语言(ASP、JSP,等等)都参照了 PHP 的设计原则。PHP 的主要创新是易于使用:PHP 代码直 接嵌入普通的 HTML 中;对学过 HTML 的人来说,学习曲线极为平缓。

但是,PHP 也有自身的问题:就是因为易于使用,写出的代码凌乱、重复,设计不周。更糟的是,PHP 没有 为程序员提供多少防止安全漏洞的保护机制,很多 PHP 开发者意识到这一点再去学习相关的知识就晚了。

上述问题以及类似的缺陷直接促使了“第三代”Web 开发框架的涌现。Web 开发的新方式也提升了人们的雄 心,现在 Web 开发者每天所做的工作越来越多。

Django 就是为了迎接这些雄心而诞生的。

二、Django入门及配置

  1. 创建Django项目:django-admin startproject 项目名

  2. Setting 配置介绍:

    • TIME_ZONE 时区设置
    • INSTALLED_APPS Django默认自带的应用
      • django.contrib.admin:管理后台
      • django.contrib.auth:身份验证系统
      • django.contrib.contenttypes:内容类型框架
      • django.contrib.sessions:会话框架
      • django.contrib.messages:消息框架
      • django.contrib.staticfiles:管理静态文件的框架
  3. 常见设计模式:MVC

    • 模型(M)是数据的表述。它不是真正的数据,而是数据的接口。使用模型从数据库中获取数据时, 无需知道底层数据库错综复杂的知识。模型通常还会为数据库提供一层抽象,这样同一个模型就能使 用不同的数据库。
    • 是你看到的界面。它是模型的表现层。在电脑中,视图是你在浏览器中看到的 Web 应用的页面,或者是桌面应用的 UI。视图还提供了收集用户输入的接口。
    • 控制器©控制模型和视图之间的信息流动。它通过程序逻辑判断通过模型从数据库中获取什么信 息,以及把什么信息传给视图。它还通过视图从用户那里收集信息,并且实现业务逻辑:变更视图, 或者通过模型修改数据,或者二者兼具。
  4. Django设计模式:MVT

    • 模型(M)既数据访问层,这一层包含了所有数据相关的功能及数据库和数据模型
    • 模版(T)既表现层,这一层包含了表现的相关决策
    • 视图(V)既业务逻辑层,这一层包含了访问模型和如何找到适合的模版的逻辑,视图就是模型和模版的桥梁
  5. 视图和URL:配置URL相当于Django驱动网站的目录,简单来讲,URL配置把URL映射到相应的视图函数上。我们以这种方式告诉Django,访问哪些URL时调用哪些代码。在使用命令创建的DJango项目中是关于Django项目的一些配置管理文件其中 urls.py 是Django项目中URL的声明配置文件。

    1. include:用于导入另一个URL配置文件
    2. urlpatterns:负责定义URL和处理URL的代码之间的映射
    3. url():这个函数负责告诉Django如何处理配置的URL,使用哪些类方法或者函数
  6. URL格式说明:url(r"^index/$", IndexView.as_view(), name=“index”)

    1. 正则表达式:DJango的URL配置允许使用任何复杂的正则表达式匹配复杂的URL
    2. r :在Python语法里,字符串中的反斜线代表某种转义特殊字符,所以需要使用r来声明为“原始字符串”里面的反斜线不用于转义
    3. :表示在字符串的开头匹配模型,例如:r“index/” 表示任何以 index/ 开头的URL都可以被匹配
    4. r i n d e x / :表示在字符串的结尾匹配模型,例如:r“index/ ” 表示任何以 /index/ 结尾的URL都可以被匹配
  7. ROOT_URLCONF:它是DJango中一个重要的配置选项,它告诉DjangoURL配置在哪个Python模块中,当接受请求后,Django 加载 ROOT_URLCONF 设置指定的 URL 配置,然后按照顺序检查URL配置中每个URL的配置模式,依次与请求的URL做比较,直到找到配置模式为止。

  8. Django处理请求的过程:

    1. 请求URL例如:/index
    2. Django 查看 ROOT_URLCONF 设置,找到根 URL 配置
    3. Django 比较 URL 配置中的各个 URL 模式,找到与 /hello/ 匹配的配置模式
    4. 找到匹配的配置模式后,调用对应的视图函数
    5. 视图函数返回对应的数据
  9. URL配置和松耦合:松耦合是一种软件开发方式,其价值是让组件可以互换,如何两部分代码是送耦合,那个改动其中一部分,对另一部分几乎没有影响,在DJango应用中,URL的定义与所调用视图的函数是送耦合的关系,既某个功能使用哪个URL与视图函数的实现本身放在两个地方。

  10. 动态URL:可以携带参数的URL,首先HTTP协议向服务器传参的途径:

    • 使用正则提取URL特定部分,如:/api/index/2018
    • 查询字符串(query string)形如 key1=value1&key2=value2
    • 请求体(body)中发送数据,如表单数据、Json、XML
    • HTTP报文的头 header 中
  11. URL路径参数:如果想从URL中获取值,需要在正则表达式中使用分组

    • 位置参数:http://127.0.0.1:8000/18/188/ 提取 18、188
    url(r'^(\d+)/(\d+)/$', views.index)
    
    • 关键字参数:同样提取 http://127.0.0.1:8000/18/188/ 18、188
    url(r'^(?P<value1>\d+)/(?P<value2>\d+)/$', views.index)
    

    当使用了关键字参数时,那么视图函数中的偏移量的参数名也要和关键字参数名相同

  12. 查询字符串:获取请求路径中的查询字符串参数(形如?k1=v1&k2=v2)通过 request.GET属性获取,返回QueryDict对象,使用 request.GET.get() 来获取参数

  13. 请求体:请求体数据格式不固定,可以是表单类型字符串,也可以是JSON、XML(可以发送请求体数据的请求方式有 POST、PUT、PATCH、DELETE)

    • 表单类型:前端发送的表单类型的请求体数据,可以request.POST 属性获取,返回QueryDict对象
    • 非表单类型:DJango无法自动解析可以直接 request.body 获取原始的请求体数据,然后按照对应的格式解析即可

猜你喜欢

转载自blog.csdn.net/qq_42768234/article/details/105228995