Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象

路由系统

  1. 路由系统基本格式
    urlpatterns = [
    path( 要匹配的路径(可以是正则表达式), 视图函数, 参数, 别名)

  2. 参数说明
    (1)正则表达式:一个正则表达式字符串
    (2)视图函数:一个可调用对象,通常为一个视图函数或一个指定视图函数路径的字符串
    (3)参数:要传递给视图函数的默认参数(字典形式,可选)
    (4)别名:一个可选的name参数

  3. 正则表达式详解
    (1)在python中使用 re_path模块来写正则表达式
    (2)正则表达式的开始使用“^”表示。
    (3)正则表达式的结束使用“$”表示。
    (4)“r” 元字符串 防止正则表达式中的转义。
    Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象

Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象

  1. 正则表达式分组及分组命名匹配
    (1)分组匹配:
    正则表达式分组匹配是通过小括号”()”来捕获URL中的值并以位置参数形式传递给视图。
    Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象
    注意:视图函数接受的是内容时字符串类型。

(2)分组命名匹配:
分组命名正则表达式组的语法是(?Ppattern),
其中name是组的名称,pattern是要匹配的模式。
捕获的值作为关键字参数而不是位置参数传递给视图函数。
Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象

Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象

  1. 视图函数中指定默认值

Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象

Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象

Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象

Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象

  1. URL反向代理

使用url反向代理,解决硬编码问题。
不使用反向代理:
浏览器访问index9,返回index9页面,点击超链接访问index10页面。
Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象

Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象

Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象

Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象
使用反向代理:

Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象

Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象

Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象

Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象

Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象

Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象
Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象

控制台打印:
Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象

Django中的app应用

app(application)就是应用的意思,当我们的项目足够大的时候,我们将功能单独分成多个app进行开发

通过命令行创建app应用

  1. 命令: python manage.py startapp app名称
    Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象
    Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象
  2. settings.py 文件 INSTALLD_APPS 列表中注册app
    Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象
    使用:
  3. 在app的views.py中编写视图函数
    Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象
  4. 在urls.py中写路由
    Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象
  5. 在templates中写html页面
    Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象
  6. 效果

Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象

App内部的独立文件

子路由(独立url)

之前我们将所有的路由都放到了主urls当中,django支持我们在每个app应用中编写自己的子路由(url)

  1. 编写自己的子路由
    Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象
  2. 主路由包含子路由
    Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象
  3. 访问路径时,主路径+子路径
    Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象

独立模板文件
在外层的templates中和app01、app02中分别创建index.html,默认访问外层templates中的index.html文件,如果templates中不存在,则按照settings.py中
App的注册顺序进行加载。
Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象

Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象因此设置识别目录:
Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象

Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象

Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象

Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象

Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象

扩展:
Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象如果设置为False : 表示不检索 app下templates
Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象
独立静态文件
Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象扩展: app01为识别目录
Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象注意:
在线上和项目当中,django使用不是一套静态文件
Apache和Nginx当中都需要配置独立的静态文件路由

  1. 配置静态根目录
    Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象
  2. 创建app当中的静态目录结构
    Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象
  3. 收集静态文件
    E:\pythonProject\Only>python manage.py collectstatic
    Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象

登录功能

  1. 查看request.method 参数内容
    Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象返回提交的方式,GET 或者POST

  2. 获取表单提交过来的内容
    Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象

  3. 向页面中返回错误信息
    Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象

  4. 结构优化
    Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象

  5. 重定向到成功界面
    Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象

视图系统

一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应。
响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片。
无论视图本身包含什么逻辑,都要返回响应。代码写在哪里也无所谓,只要它在你当前项目目录下面。大家约定成俗将视图放置在项目(project)或应用程序(app)目录中的名为views.py的文件中。

FBV和CBV
我们之前写过的都是基于函数的view,就叫FBV(Function base view)。还可以把view写成基于类的CBV格式。
核心知识点:

  1. 继承 from django.views import View
  2. 覆写 get和post 方法,(注意传递request参数)
  3. 路由使用: 模块名.类名.as_view()
    Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象

请求和响应对象

请求对象
当一个页面被请求时,Django就会创建一个包含本次请求原信息的HttpRequest对象。
Django会将这个对象自动传递给响应的视图函数,一般视图函数约定俗成地使用 request 参数承接这个对象。

(1).请求相关的常用值
path_info 返回用户访问url,不包括域名
method 请求中使用的HTTP方法的字符串表示,全大写表示。
GET 包含所有HTTP GET参数的类字典对象
POST 包含所有HTTP POST参数的类字典对象
body 请求体,byte类型 request.POST的数据就是从body里面提取到的

(2).请求常用属性

  1. HttpRequest.scheme
    表示请求方案的字符串(通常为http或https)

  2. HttpRequest.path
    一个字符串,表示请求的路径组件(不含域名)。
    例如:"/music/bands/the_beatles/"

  3. HttpRequest.method
    一个字符串,表示请求使用的HTTP 方法。必须使用大写。例如:“GET”、“POST”

  4. HttpRequest.encoding

一个字符串,表示提交的数据的编码方式(如果为 None 则表示使用 DEFAULT_CHARSET 的设置,默认为 ‘utf-8’)。

  1. HttpRequest.GET
    一个类似于字典的对象,包含 HTTP GET 的所有参数。详情请参考 QueryDict 对象。
  2. HttpRequest.POST

一个类似于字典的对象,如果请求中包含表单数据,则将这些数据封装成 QueryDict 对象。

POST 请求可以带有空的 POST 字典 —— 如果通过 HTTP POST 方法发送一个表单,但是表单中没有任何的数据,QueryDict 对象依然会被创建。

  1. HttpRequest.COOKIES
    一个标准的Python 字典,包含所有的cookie。键和值都为字符串。

  2. HttpRequest.META

一个标准的Python 字典,包含所有的HTTP 首部。具体的头部信息取决于客户端和服务器,下面是一些示例:

CONTENT_LENGTH —— 请求的正文的长度(是一个字符串)。
CONTENT_TYPE —— 请求的正文的MIME 类型。
HTTP_ACCEPT —— 响应可接收的Content-Type。
HTTP_ACCEPT_ENCODING —— 响应可接收的编码。
HTTP_ACCEPT_LANGUAGE —— 响应可接收的语言。
HTTP_HOST —— 客服端发送的HTTP Host 头部。
HTTP_REFERER —— Referring 页面。
HTTP_USER_AGENT —— 客户端的user-agent 字符串。
QUERY_STRING —— 单个字符串形式的查询字符串(未解析过的形式)。
REMOTE_ADDR —— 客户端的IP 地址。
REMOTE_HOST —— 客户端的主机名。
REMOTE_USER —— 服务器认证后的用户。
REQUEST_METHOD —— 一个字符串,例如"GET" 或"POST"。
SERVER_NAME —— 服务器的主机名。
SERVER_PORT —— 服务器的端口(是一个字符串)。
  1. HttpRequest.FILES

一个类似于字典的对象,包含所有的上传文件信息。
FILES 中的每个键为 中的name,值则为对应的数据。
注意,FILES 只有在请求的方法为POST 且提交的 带有enctype=“multipart/form-data” 的情况下才会包含数据。否则,FILES 将为一个空的类似于字典的对象。

  1. HttpRequest.get_full_path() 方法

返回 path,如果可以将加上查询字符串。
  例如:"/music/bands/the_beatles/?print=true"

文件上传
Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象响应对象

  1. HttpResponse --> 返回字符串内容
  2. render --> 返回一个html页面
  3. redirect --> 返回一个重定向(告诉浏览器再去访问另外的网址)
  4. JsonResponse
    JsonResponse是HttpResponse的子类,专门用来生成JSON编码的响应。
    Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象浏览器呈现出的json数据
    Django基础(三)----路由系统、Django中的App应用、视图系统、App内部的独立文件、登录功能、请求和响应对象