【Django3.2学习】02-路由与视图之间的映射关系

快速使用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

此时可以看到目录结构发生了改变:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AYx9kuAZ-1648294755721)(C:/Users/Abo/AppData/Roaming/Typora/typora-user-images/image-20220326174529715.png)]

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 子应用的用途

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TpUQlMNJ-1648294755723)(C:/Users/Abo/AppData/Roaming/Typora/typora-user-images/image-20220326180248727.png)]

​ 如上图,一个项目中会有很多的功能,比如进入一个网站的首页后有用户注册、用户登录、密码安全,首页还有商品列表、商品详情、商品评价等。

​ 而子应用的目的就是为了归类,便于管理,例如用户注册、用户登录、密码安全都是针对用户的功能,那么这些功能就可以放在用户模块中,即用户子应用中。而商品列表,商品详情,商品评价都是针对商品的功能,那么这些功能就可以放在商品子应用中。

2.在子应用的视图文件中编写视图函数

2.1 MVC与MVT
2.1.1 MVC

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-akBV0EA6-1648294755724)(C:/Users/Abo/AppData/Roaming/Typora/typora-user-images/image-20220326184852998.png)]

  • Model:模型,编写操作数据库的代码,往往就是一个个类或对象
  • View:视图模板,编写页面效果的代码,往往就是一个具有特殊语法的html文件
  • Controller:控制器,调用模型获取数据,并把数据写入视图中。往往就是一个个类或者对象
2.1.2 MVT

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2l2jAQny-1648294755725)(C:/Users/Abo/AppData/Roaming/Typora/typora-user-images/image-20220326184923469.png)]

  • 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 请求过程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yR0rB5lR-1648294755725)(C:/Users/Abo/AppData/Roaming/Typora/typora-user-images/image-20220326192226891.png)]

  1. 用户根据浏览器输入url发送请求
  2. 请求到达web服务器,web服务器接收客户端的请求和请求数据并绑定IP端口和项目目录
  3. web服务器根据路由调用项目代码
    1. manage.py中的os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'djdemo.settings')找到配置文件settings
    2. 根据settings中WSGI_APPLICATION = 'djdemo.wsgi.application'找到wsgi中的application的配置application = get_wsgi_application(),application实际上就是主应用中urls.py中定义的映射关系
    3. 通过urls.py中定义的路由去找与之建立映射的视图view
    4. 执行业务逻辑
  4. 响应application对象给web服务器
  5. web服务器将相应结果响应给浏览器
2.5.2 路由IP

​ Route路由,是一种映射关系!!!

​ 路由是把客户端请求的url地址和用户请求的应用程序(这里就是指Django里面的视图)进行一对一绑定映射的一种关系

​ 当然,在项目中,我们常常说的路由,一般是指一个类,这个类完成了路由要做的事情

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值