路由与视图之间的映射关系
快速使用Django
在Django中要提供数据展示给用户,我们需要完成3个步骤
1.创建子应用
2.在子应用的视图文件中编写视图函数
3.把视图和url进行绑定注册到django项目
用户就可以通过url地址访问,用户访问的时候,django自动根据url地址执行对应的视图函数
1.创建子应用
python manage.py startapp 子应用名称
子应用名称将来会作为目录名而存在,所以不能出现特殊符号,不能出现中文等多字节的字符
打开终端执行命令:
(djdemo) D:\PythonDevelop\WorkSpace\djdemo>py manage.py startapp home
此时可以看到目录结构发生了改变:
1.1 子应用结构介绍
djdemo
├── djdemo
│ └── _init_.py
│ └── asgi.py
│ └── settings.py
│ └── urls.py
│ └── wsgi.py
├── home
│ └── migrations
│ └── _init_.py
│ └── _init_.py
│ └── admin.py
│ └── apps.py
│ └── models.py
│ └── tests.py
│ └── views.py
├── manage.py
(已介绍过的结构不再介绍)
- home:子应用的包
- migrations:记录数据库版本记录的包(存放数据库迁移的历史文件)
- admin.py:文件跟网站的后台管理站点配置相关
- apps.py:文件用于配置当前子应用的相关信息
- models.py:保存数据库模型类
- tests.py:开发测试用例,编写单元测试
- views.py:用于编写Web应用视图
1.2 子应用的用途
如上图,一个项目中会有很多的功能,比如进入一个网站的首页后有用户注册、用户登录、密码安全,首页还有商品列表、商品详情、商品评价等。
而子应用的目的就是为了归类,便于管理,例如用户注册、用户登录、密码安全都是针对用户的功能,那么这些功能就可以放在用户模块中,即用户子应用中。而商品列表,商品详情,商品评价都是针对商品的功能,那么这些功能就可以放在商品子应用中。
2.在子应用的视图文件中编写视图函数
2.1 MVC与MVT
2.1.1 MVC
- Model:模型,编写操作数据库的代码,往往就是一个个类或对象
- View:视图模板,编写页面效果的代码,往往就是一个具有特殊语法的html文件
- Controller:控制器,调用模型获取数据,并把数据写入视图中。往往就是一个个类或者对象
2.1.2 MVT
-
Model:模型,编写操作数据库的代码,往往就是一个个类或对象
-
View:视图,调用模型获取数据,并把数据写入视图中。往往就是一个个类或者对象
-
Template:模板,编写页面效果的代码,往往就是一个具有特殊语法的html文件
2.2 编写视图函数
在子应用home
中的views.py
编写视图函数:
from django.shortcuts import render
from django.http.response import HttpResponse
def index(request):
""" 视图函数,一个视图函数就是一个url地址对应的界面 """
return HttpResponse(content="hello") # content 就是返回的内容,可以省略不写
Django中的视图必须返回HttpResponse这种响应结构,否则会报错
2.3 建立路由和视图的映射
在主应用djdemo
中的urls.py
建立路由和视图的映射关系
from django.contrib import admin
from django.urls import path
from home import views
urlpatterns = [
path('admin/', admin.site.urls),
path('/hello', views.index),
]
2.4 启动项目并测试
在终端启动项目,并访问http://127.0.0.1:8000/hello/
进行测试
2.5 Web服务器与路由IP
上面的过程我们可以展示数据给客户端浏览器了,但是这个过程发生了什么?怎么实现的?我们需要清晰两个概念Web服务器
和路由
ip
2.5.1 Web服务器
Web服务器,全称也叫
http web server
,专门用于提供网页浏览服务器的一类软件,可以通过各类语言使用代码开发,我们执行manage.py文件中,之所以用户能够使用浏览器访问就是web服务器的功劳。 常见的Web服务器软件:
- nginx
- uwsgi
- gunicorn
- apache
- tomcat
- iis
其中,uwsgi和gunicorn就是使用python开发的web服务器软件
注意:大部分的项目框架都有内置的测试web服务器,其中django框架就内置了python解析器提供的wsgiref模块,这个模块是python官方提供给开发者进行学习测试使用的,不能用于项目的线上环境中。
因为这个测试web服务器性能不好,不支持多线程
wsgi 就是python基于cgi标准实现的http通讯技术
asgi 就是wsgi的异步版本,这里的a就是async的缩写
2.5.1.1 请求过程
- 用户根据浏览器输入url发送请求
- 请求到达web服务器,web服务器接收客户端的请求和请求数据并绑定IP端口和项目目录
- web服务器根据路由调用项目代码
- manage.py中的
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'djdemo.settings')
找到配置文件settings - 根据settings中
WSGI_APPLICATION = 'djdemo.wsgi.application'
找到wsgi中的application的配置application = get_wsgi_application()
,application实际上就是主应用中urls.py中定义的映射关系 - 通过urls.py中定义的路由去找与之建立映射的视图view
- 执行业务逻辑
- manage.py中的
- 响应application对象给web服务器
- web服务器将相应结果响应给浏览器
2.5.2 路由IP
Route路由,是一种映射关系!!!
路由是把客户端请求的url地址和用户请求的应用程序(这里就是指Django里面的视图)进行一对一绑定映射的一种关系
当然,在项目中,我们常常说的路由,一般是指一个类,这个类完成了路由要做的事情