【零基础学Python】后端开发篇 第二十二节--Python Web开发(三):HTTP请求的url路由

简介: 【零基础学Python】后端开发篇 第二十二节--Python Web开发(三):HTTP请求的url路由

前言: 📢📢📢
🏅🏅🏅作者简介:是Dream呀,华为云享专家、CSDN原力计划作者、Python领域优质创作者,专注分享Python领域原创系列文章。
🌻🌻🌻热门专栏:【零基础学Python】
本课程是针对Python入门&进阶打造的一全套课程,在这里,我将会一 一更新Python基础语法、Python爬虫、Web开发、 Django框架、Flask框架以及人工智能相关知识,帮助你成为Python大神,如果你喜欢的话就抓紧收藏订阅起来吧~💘💘💘
🍋🍋🍋如果对学习没有自制力或者没有一起学习交流的动力,欢迎私信我或者文末添加vx,拉你进群,群内有行业大佬帮大家解答疑问,我们一起学习,群内定期还会有抽奖活动和红包相送嗷,快来进入我们吧~
💕 入门须知:这片乐园从不缺乏天才,努力才是你的最终入场券!🚀🚀🚀
💓最后,愿我们都能在看不到的地方闪闪发光,一起加油进步🍺🍺🍺

一、要实现的目标
我们的目标是实现一个 公司 的 销售管理系统。
在这里插入图片描述
这个在以后的课程中,我会一步步带领大家去完成这个销售管理系统。

二、创建项目app
1.APP介绍
Django 中的一个app 就是项目里面的一个应用的意思。一个项目包含多个app。一个app 通常就是一个相对独立的模块 ,实现相对独立的功能。
比如,我们可以把 这个系统的 管理员管理的功能 做在一个名字为 mgr的app里面,把 销售人员的操作 实现在另外一个名字为 sales的app里面。
一个app 本质上 就是一个 Python 包, 里面包含了一些应用相关的代码文件。当然,一个项目分成多少个app 这完全取决你的设计。 你把所有的功能都放入一个大app内也可以实现功能,只是这样做,这个app特别的臃肿。

2.创建APP
Django 中创建app 可以 通过执行命令,创建一个app目录,并在里面自动创建app常用的文件。比如,现在我们需要一个app 专门处理 白月医药系统中销售员的 添加、修改、查询、删除请求。
我们就进入项目根目录,执行下面的命令。

python manage.py startapp sales
首先找到我们的文件,然后右键进入终端:
在这里插入图片描述
然后在我们的终端中输入我们的命令:python manage.py startapp sales :
python manage.py startapp sales
这样就会发现,我们的目录中出现了我们新创建的app:
在这里插入图片描述
这样就会创建一个目录名为 sales, 对应 一个名为 sales 的app,里面包含了如下自动生成的文件。

sales/

__init__.py
admin.py
apps.py
migrations/
    __init__.py
models.py
tests.py
views.py

这个目录其实就是一个python package里面有很多文件,后面我们会分别讲到它们的作用。

三、返回 页面内容 给浏览器
当浏览器地址栏中输入网址访问的时候,服务端是如何让浏览器呈现出网页内容的?
是这样的: 当我们输入网址,比如百度网址,比较敲回车后, 浏览器会发出http请求给百度的服务器,百度服务器返回 HTML 文档内容给浏览器, 浏览器解析后,呈现出我们最终看到的网页内容。
服务器返回的 HTML 文档内容其实就是 符合 HTML 语法的 一段字符串 而已。
我们现在使用Django 开发后端服务, 就可以响应 浏览器的http请求, 返回一段HTML字符串, 浏览器就可以呈现在界面上了。刚才我们创建的 sales 应用里面 有个 views.py 文件。 这个文件里面通常是写处理http 请求的代码的。
比如,我们 设计 凡是浏览器访问的http 请求的 url 地址 是 /sales/orders/ , 就由 views.py 里面的函数 listorders 来处理, 返回一段字符串给浏览器。
我们打开 views.py , 在里面加入如下内容:

from django.http import HttpResponse

def listorders(request):

return HttpResponse("下面是系统中所有的订单信息。。。")

在这里插入图片描述

这里面最终的返回结果是 HttpResponse 对象的参数字符串 ,也就是这句话

下面是系统中所有的订单信息。。。
listorders的参数 request 是Django中的 HttpRequest 对象,包含了HTTP请求中的信息。
后端程序处理请求,常常要根据请求中的数据进行相应的处理:比如请求添加一个用户,那么HTTP请求消息中就会携带要添加用户的信息(姓名、登录账号等)。我们写后端的代码,这些信息就在 HttpRequest对象中获取。所以这个参数非常重要。

光是定义了这样一个函数不行的,我们需要 告诉 Django :
当前端发送过来的HTTP请求 url地址 是 /sales/orders/ , 就由 views.py 里面的函数 listorders 来处理
怎么告诉Django呢?
这就是 Django中的 url路由设置。

四、url路由
1.添加路由记录
前面在创建项目目录的时候,在项目的设置目录下,有如下的一个urls.py 文件:
在这里插入图片描述
这个文件是 url路由设置的入口文件。
打开该文件,在 urlpatterns 列表变量中添加一条路由信息,结果如下

from django.contrib import admin
from django.urls import path

别忘了导入 listorders 函数

from sales.views import listorders

urlpatterns = [

path('admin/', admin.site.urls),

# 添加如下的路由记录
path('sales/orders/', listorders),

]
urlpatterns 列表 就是 Django 的 url 路由的入口。

里面是一条条的路由记录,我们添加的:

path('sales/orders/', listorders)
就是告诉 当前端过来的请求 url地址 是 /sales/orders/ (注意:最后的一个斜杠不能省略) , 就由 views.py 里面的函数 listorders 来处理。
所以,所谓 路由 就是指 : 根据 HTTP请求的url路径, 设置 由哪个 函数来处理这个请求。

1.1解决 ERROR: Could not find a version that satisfies the requirement xxx
当我们将以上代码放到url文件中,我们并没有导入sales库:
在这里插入图片描述
此时,我们按照常理在终端中pip install sales 的时候,会出现ERROR: Could not find a version that satisfies the requirement xxx的问题。
该问题常常会误导我们认为是下载的安装包之间存在冲突,因而花费大量的时间去配置各种各样的环境。
其实出现这个问题的原因是python国内网络不稳定,直接导致报错。因此我们常用镜像源来解决此问题。如下:

pip install 包名 -i http ://pypi.douban.com/simple/ --trusted-host pypi.douban.com
即:

pip install sales -i http ://pypi.douban.com/simple/ --trusted-host pypi.douban.com
在这里插入图片描述

1.2启动web服务
这个地方需要我们启动web服务,使之达到这个效果:
这个地方大家如果不太懂的话可以看本专栏的第二节课 :Python Web开发二:Django的安装和运行
bc.png)
我们这时,就可以登录浏览器输入网址 http ://127.0.0.1:8080/sales/orders/ (注意:最后的一个斜杠不能省略)
回车后,就会出现如下内容:
在这里插入图片描述
这就是浏览器的请求经过 Django路由后, 选择执行我们定义的函数 listorders,该函数 返回的字符串, 被作为http响应的消息体中的内容返回给 浏览器了。
所以浏览器最终显示的就是 我们 listorders 函数返回的字符串。

注意:

只要修改了路由表配置,添加了我们自己的路由记录,再去浏览器访问 首页,这里就是 http ://127.0.0.1:8080 ,前面曾经出现的小火箭欢迎页就不见了! 会出现一个 404 Not Found 的报错页面。
在这里插入图片描述

这是正常的,小火箭欢迎页面 是Django在调试模式下,发现路由记录没有添加的时候,缺省作为首页的。 真正的产品是不会使用这个首页的。一旦路由记录发生变动, 就会消失。

2.路由子表
url 路由表就是可以像上面这样,一个请求对应一个处理函数。
但是有的时候,我们的项目比较大的时候, 请求的url 会特别多。
比如我们的系统提供给 客户、销售商、管理员 访问的url是不一样的,如下:

customer/
customer/orders/

sales/
sales/orders/

mgr/
mgr/customers/
mgr/medicines/
mgr/orders/
这个时候,我的路径是会有很多的,像这样:

from django.contrib import admin
from django.urls import path

别忘了导入 listorders 函数

from sales.views import listorders
urlpatterns = [

path('admin/', admin.site.urls),

添加如下的路由记录

path('sales/orders/', listorders),
path('sales/orders/', listorders1),
path('sales/orders/', listorders2),
path('sales/orders/', listorders3),
path('sales/orders/', listorders4),


path('mgr/orders/', mlistorders),
path('mgr/orders/', mlistorders1),
path('mgr/orders/', mlistorders2),
path('mgr/orders/', mlistorders3),
path('mgr/orders/', mlistorders3),

]
此时,我们在sales下面新建一个urls文件,将如上代码放上去。
在这里插入图片描述
同时将views中的一个函数,变为多个:

from django.shortcuts import render

Create your views here.

from django.http import HttpResponse

def listorders(request):

return HttpResponse("下面是系统中所有的订单信息。。。")

def listorders1(request):

return HttpResponse("下面是系统中所有的订单信息111。。。")

def listorders2(request):

return HttpResponse("下面是系统中所有的订单信息222。。。")

def listorders3(request):

return HttpResponse("下面是系统中所有的订单信息333。。。")

bysms下的一级路由表使用include函数处理:
在这里插入图片描述
此时,当我们经过一级路由表再去访问sales下的二级路由表时,因为一级中的路由记录 path('sales/', include('sales.urls')),我们已经自动锁定sales文件下了,所以二级路由表可以直接把路径中的sales去掉,只保留下一级:
在这里插入图片描述
简而言之:二级路由表要把前面一级匹配上的部分去掉!

然后再次启动我们的cmd,如果其处于上次的状态中,可以按ctrl+C强行终止:
在这里插入图片描述
输入我们的网址:http ://127.0.0.1:8080/sales/orders/ 查看:
在这里插入图片描述
我们修改order,使之为order1、order2以及更多,当我们发现网页上的内容就是我们的各个函数输出的内容时,则说明我们布置成功啦!
在这里插入图片描述
这里就匹配了 orders/ ,匹配的对象,这里是 views.listorders ,它是一个处理函数,就调用该函数处理 这个http请求, 将该函数的返回对象 构建 HTTP响应消息,返回给客户端。

目录
相关文章
|
5月前
|
API C++ 开发者
PySide vs PyQt:Python GUI开发史诗级对决,谁才是王者?
PySide 和 PyQt 是 Python GUI 开发领域的两大利器,各有特色。PySide 采用 LGPL 协议,更灵活;PyQt 默认 GPL,商业使用需授权。两者背后团队实力雄厚,PySide 得到 Qt 官方支持,PyQt 由 Riverbank Computing 打造。API 设计上,PySide 简洁直观,贴近原生 Qt;PyQt 增加 Pythonic 接口,操作更高效。性能方面,两者表现优异,适合不同需求的项目开发。选择时可根据项目特点与开源要求决定。
342 20
|
3月前
|
数据采集 存储 数据库
Python爬虫开发:Cookie池与定期清除的代码实现
Python爬虫开发:Cookie池与定期清除的代码实现
|
4月前
|
IDE 开发工具 Python
魔搭notebook在web IDE下,使用jupyter notebook,python扩展包无法更新升级
魔搭notebook在web IDE下,使用jupyter notebook,python扩展包无法更新升级,不升级无法使用,安装python扩展包的时候一直停留在installing
99 4
|
4月前
|
人工智能 搜索推荐 数据可视化
用 Python 制作简单小游戏教程:手把手教你开发猜数字游戏
本教程详细讲解了用Python实现经典猜数字游戏的完整流程,涵盖从基础规则到高级功能的全方位开发。内容包括游戏逻辑设计、输入验证与错误处理、猜测次数统计、难度选择、彩色输出等核心功能,并提供完整代码示例。同时,介绍了开发环境搭建及调试方法,帮助初学者快速上手。最后还提出了图形界面、网络对战、成就系统等扩展方向,鼓励读者自主创新,打造个性化游戏版本。适合Python入门者实践与进阶学习。
334 1
|
5月前
|
网络协议 API 开发者
分析http.client与requests在Python中的性能差异并优化。
合理地选择 `http.client`和 `requests`库以及在此基础上优化代码,可以帮助你的Python网络编程更加顺利,无论是在性能还是在易用性上。我们通常推荐使用 `requests`库,因为它的易用性。对于需要大量详细控制的任务,或者对性能有严格要求的情况,可以考虑使用 `http.client`库。同时,不断优化并管理员连接、设定合理超时和重试都是提高网络访问效率和稳定性的好方式。
124 19
|
4月前
|
网络协议 API Python
解析http.client与requests在Python中的性能比较和改进策略。
最后,需要明确的是,这两种库各有其优点和适用场景。`http.client` 更适合于基础且并行的请求,`requests` 则因其易用且强大的功能,更适用于复杂的 HTTP 场景。对于哪种更适合你的应用,可能需要你自己进行实际的测试来确定。
120 10
|
4月前
|
存储 算法 数据可视化
用Python开发猜数字游戏:从零开始的手把手教程
猜数字游戏是编程入门经典项目,涵盖变量、循环、条件判断等核心概念。玩家通过输入猜测电脑生成的随机数,程序给出提示直至猜中。项目从基础实现到功能扩展,逐步提升难度,适合各阶段Python学习者。
191 0
|
6月前
|
程序员 测试技术 开发工具
怎么开发Python第三方库?手把手教你参与开源项目!
大家好,我是程序员晚枫。本文将分享如何开发Python第三方库,并以我维护的开源项目 **popdf** 为例,指导参与开源贡献。Popdf是一个PDF操作库,支持PDF转Word、转图片、合并与加密等功能。文章涵盖从fork项目、本地开发、单元测试到提交PR的全流程,适合想了解开源贡献的开发者。欢迎访问[popdf](https://gitcode.com/python4office/popdf),一起交流学习!
209 21
怎么开发Python第三方库?手把手教你参与开源项目!
|
4月前
|
数据采集 存储 监控
抖音直播间采集提取工具,直播间匿名截流获客软件,Python开发【仅供学习】
这是一套基于Python开发的抖音直播间数据采集与分析系统,包含观众信息获取、弹幕监控及数据存储等功能。代码采用requests、websockets和sqlite3等...
|
5月前
|
Web App开发 前端开发 JavaScript
鸿蒙5开发宝藏案例分享---Web适配一多开发实践
这是一份实用的鸿蒙Web多设备适配开发指南,针对开发者在不同屏幕尺寸下的布局难题提供了解决方案。文章通过三大法宝(相对单位、媒体查询和窗口监听)详细介绍如何实现智能适配,并提供了多个实战案例,如宫格布局、对话框变形和自适应轮播图等。此外,还分享了调试技巧及工具推荐,帮助开发者快速上手并优化性能。最后鼓励读者实践探索,并提示更多官方资源等待发现。

推荐镜像

更多