python编程从入门到实践答案,python编程从入门到实践课后题答案第五章
Yyds干货库存
一、要实现的目标我们的目标是实现一个公司的销售管理系统。
在以后的课程中,我会一步一步的带领你完成这个销售管理系统。
其次,创建项目app1。app简介Django中的APP是指项目中的一个应用。一个项目包含多个应用程序。一个app通常是一个相对独立的模块,实现相对独立的功能。
比如我们可以在一个名为mgr的app中管理这个系统的管理员的功能,在另一个名为sales的app中实现销售人员的操作。
一个app本质上就是一个Python包,里面包含了一些应用相关的代码文件。当然,一个项目分成多少个app,完全取决于你的设计。也可以把自己所有的功能放到一个大app里实现功能。就这样做,这个app就显得特别臃肿。
2.在Django创建一个应用程序。您可以通过执行命令来创建应用程序目录,并自动在其中创建应用程序常用的文件。比如现在我们需要一个app来处理百越医疗系统中销售人员的添加、修改、查询、删除等请求。
我们将进入项目的根目录,并执行以下命令。
Python manage.py startapp sales首先找到我们的文件,然后右键进入终端:
然后在我们的终端输入我们的命令:python manage.py startapp sales:
这样,我们会发现我们新创建的应用程序出现在我们的目录中:
这将创建一个名为sales的目录,对应于一个名为sales的应用程序,它包含以下自动生成的文件。
Sales/_ _ init _ _。pyadmin.pyapps.pymigrations/_ _ init _ _。pymodels.pytests.pyviews.py这个目录实际上是一个包含许多文件的python包。我们稍后将讨论它们的功能。
3.将页面内容返回给浏览器。在浏览器地址栏输入网址时,服务器如何让浏览器呈现页面内容?
是这样的:当我们输入一个网址,比如百度的网址,然后回车,浏览器会向百度的服务器发送一个http请求,百度的服务器会将HTML文档内容返回给浏览器。浏览器解析后,会呈现我们最终看到的网页内容。
服务器返回的HTML文档的内容实际上是一个符合HTML语法的字符串。
现在我们用Django开发后端服务,这样就可以响应浏览器的http请求,返回一个HTML字符串,浏览器就可以呈现在界面上了。我们刚刚创建的销售应用程序中有一个views.py文件。在这个文件中,通常会编写处理http请求的代码。
比如我们设计浏览器访问的http请求的url地址是/sales/orders/,由views.py中的函数listorders处理,向浏览器返回一个字符串。
我们打开views.py并向其中添加以下内容:
从django.http导入httpresponse def list orders(request):返回httpresponse(这里是系统中所有的订单信息。)
最终返回的结果是HttpResponse对象的参数字符串,就是这句话。
以下是系统中的所有订单信息。listorders的参数request是Django中的一个HttpRequest对象,它包含HTTP请求中的信息。
后端程序往往会根据请求中的数据来处理请求:比如请求添加一个用户,要添加的用户的信息(姓名、登录账号等。)将被携带在HTTP请求消息中。我们编写后端代码,这些信息在HttpRequest对象中获得。所以这个参数很重要。
仅仅定义这样一个函数是不够的。我们需要告诉姜戈:
当前客户端发送的HTTP请求的url地址是/sales/orders/,由views.py中的函数listorders处理
如何告诉Django?
这是Django中的url路由设置。
四。url路由1。添加路由记录。创建项目目录时,项目的设置目录下有一个如下的urls.py文件:
该文件是url路由设置的入口文件。
打开文件,在urlpatterns列表变量中添加一个路由信息,结果如下
from django . contrib import admin from Django . urls导入路径#不要忘记从sales.views导入listorders函数listordersurlpatterns=[PATH( admin/,Admin.site.urls),#添加以下路由记录路径( sales/orders/,list orders),] url模式列表是Django的URL路由的入口。
里面是我们添加的所有路由记录:
Path (sales/orders/,listorders)是告诉当前请求url地址是/sales/orders/(注意:最后一个斜杠不能省略),由views.py中的函数listorders处理
所以所谓路由就是:根据一个HTTP请求的url路径,设置哪个函数来处理这个请求。
1.1解决错误:找不到符合要求的版本XXX当我们将上述代码放入url文件时,我们没有导入销售库:
此时,当我们按照常识在终端中pip安装销售时,就会出现错误的问题:找不到符合XXX要求的版本。
这个问题往往会让我们认为下载的安装包之间有冲突,所以需要花费大量的时间来配置各种环境。
其实这个问题的原因是python国内网络不稳定,直接导致报错。所以我们经常用镜像源来解决这个问题。如下所示:
皮普安装包名——我http://pypi.douban.com/simple/-trusted-host pypi.douban.com即:
皮普安装销售-我http://pypi.douban.com/simple/-信任-主机pypi.douban.com
1.2启动web服务这个地方需要我们启动web服务来达到这个效果:
如果你对这个地方不太了解,可以看看本专栏的第二课:Python Web开发II:Django的安装和运行
此时,我们可以登录浏览器,输入网址http://127 . 0 . 0 . 1:8080/sales/orders/(注意:最后一个斜杠不能省略)
进入后,会出现以下内容:
也就是浏览器的请求被Django路由后,选择执行我们定义的函数listorders。该函数返回的字符串作为http响应的消息体内容返回给浏览器。
所以浏览器最终显示的是我们的listorders函数返回的字符串。
注意:
你只要修改路由表配置,添加我们自己的路由记录,然后在浏览器里访问首页,这里是http://127.0.0.1: 8080,曾经出现在前面的小火箭欢迎页面没了!将出现404未找到错误页面。
这很正常。小火箭的欢迎页面是Django在调试模式下发现没有添加路由记录时默认的主页。真正的产品是不会用这个主页的。路由记录一旦改变,就会消失。
2.路由子表
url可以像上面这样,一个请求对应一个处理函数。
但是,有时候,当我们的项目很大时,请求的url会特别大。
例如,我们的系统为客户、供应商和管理员提供不同的URL,如下所示:
客户/
客户/订单/
销售/
销售/订单/
经理/客户/
经理/药品/
经理/订单/
这个时候,我会有很多条路,像这样:
来自django.contrib导入管理
从django.urls导入路径
#不要忘记导入listorders函数
从销售视图导入列表订单
urlpatterns=[
路径( admin/,admin.site.urls),
#添加以下路由记录
路径(销售/订单/,listorders),
路径(销售/订单/,列表订单1),
路径(销售/订单/,列表订单2),
路径(销售/订单/,列表订单3),
路径(销售/订单/,列表订单4),
路径(经理/订单/,mlistorders),
路径( mgr/orders/,mlistorders1),
路径(经理/订单/,mlistorders2),
路径( mgr/orders/,mlistorders3),
路径( mgr/orders/,mlistorders3),
]
此时,我们在sales下创建一个新的urls文件,并将上面的代码放在上面。
同时,将视图中的一个功能更改为几个功能:
从django.shortcuts导入渲染
#在此创建您的观点。
从django.http导入HttpResponse
定义列表订单(请求):
返回HttpResponse(下面是系统中的所有订单信息。)
定义列表订单1(请求):
返回HttpResponse(下面是系统中的所有订单信息111。)
定义列表订单2(请求):
返回HttpResponse(下面是系统222中的所有订单信息。)
定义列表订单3(请求):
Return HttpResponse(下面是系统中的所有订单信息333。)
bysms下的一级路由表由include函数处理:
此时,当我们遍历一级路由表,然后访问sales下的二级路由表时,因为路由记录路径( sales/,包含( sales。URLs ))在第一级已经自动锁定在销售文件下,所以第二级路由表可以直接删除路径中的销售,只保留下一级:
简而言之:二级路由表要去掉之前匹配的部分!
然后再次启动我们的cmd。如果处于最后一种状态,可以按ctrl+C强制终止:
输入我们的网址:http://127 . 0 . 0 . 1:8080/sales/orders/查看:
我们将订单修改为订单1、订单2等等。当我们发现网页上的内容是我们各种功能的输出内容时,就说明我们已经成功安排好了!
这里我们匹配orders/,匹配的对象,这里是views.listorders,这是一个处理函数,所以我们调用这个函数处理这个http请求,从这个函数返回的对象构造一个HTTP响应消息,返回给客户端。
来自博客作者为梦想原创作品。转载请联系作者取得授权,否则将追究法律责任。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。