python读取数据库后生成网页,Python实战之数据库应用和数据获取
Yyds干货库存
@TOC
首先,获取所有记录
1.1增加客户
现在我们来实现一个功能:当浏览器访问sales/customers/,我们的服务器会将系统中所有的客户记录返回给浏览器。
首先,我们添加两个客户:(如果你不明白这里,你可以去第4节)
这时,客户信息直接出现在我们的数据库管理中:
也可以通过数据库中的添加功能直接添加到数据库中。
1.2获取所有表格记录
首先,我们实现了一个函数来处理来自浏览器的、带有销售/客户URL的访问请求。我们需要返回数据库中customer表中的所有记录。
Django中对数据库表的所有操作都应该通过模型对象读写数据,而不是通过SQL语句。
例如,这里我们希望获得customer表的所有记录,该表是用我们前面定义的Customer类管理的。
我们可以这样得到所有的表记录。
在文件sales/views.py中,使用以下内容定义listcustomers函数:
#导入客户对象定义
从common.models导入客户
定义客户列表(请求):
#返回包含所有表记录的QuerySet对象。
#每个表记录都是一个dict对象,
# key是字段名称,value是字段值。
qs=Customer.objects.values()
#定义返回字符串
retStr=
对于qs中的客户:
对于名称,customer.items()中的值:
retStr=f“{ name }:{ value }
# br表示换行。
retStr= br
返回http响应(retStr)
Customer.objects.values()将返回一个由Django定义的QuerySet对象,其中包含所有的客户表记录。
QuerySet对象可以使用for循环遍历来获取其中的所有元素。每个元素对应于一个表记录。
每个表记录元素是一个dict对象,其中每个元素的键是表字段名,值是记录的字段值。
上面的代码可以将每条记录的信息存储到一个字符串中,并返回给前端浏览器。
1.3修改路由表
我们还需要修改路由表,并将路由添加到销售/客户/url请求中。
之前,我们在主路由文件bysms\urls.py中有以下记录:
#其中url以sales/开头,
#根据sales.urls中的子路由表进行路由
path(sales/),include(sales.urls ),
这个URL记录表示所有以sales/开头的URL都是根据sales.urls中的子路由表进行路由的我们只需要修改sales/urls.py并添加以下记录:
path(customers/,views.listcustomers),
您可以使用admin登录并添加一些客户记录。
然后可以在浏览器中输入以下网址:http://127 . 0 . 0 . 1:8080/sales/customers/
输入后,浏览器显示类似如下的结果:
这与我们数据库中记录的信息一致。
此时,我们通过F12抓取数据包:
你会发现此时的br就是我们的换行指令。
二、过滤条件
2.1什么是过滤条件?
有时候,我们需要根据过滤条件查询一些客户信息。
例如,当用户输入/销售/客户/?电话号码=1300000001,需要返回电话号码=13000000001客户记录。
我们可以通过filter方法添加过滤条件,并修改视图中的代码,如下所示:
定义客户列表(请求):
#返回包含所有表记录的QuerySet对象。
qs=Customer.objects.values()
#检查url中是否有参数phonenumber
ph=请求。GET.get(电话号码,无)
#如果是,添加过滤条件。
如果ph值:
qs=qs.filter(phonenumber=ph)
#定义返回字符串
retStr=
对于qs中的客户:
对于名称,customer.items()中的值:
retStr=f“{ name }:{ value }
# br表示换行。
retStr= br
返回http响应(retStr)
与刚才不同的是,我们增加了一个过滤条件:
#检查url中是否有参数phonenumber
ph=请求。GET.get(电话号码,无)
#如果是,添加过滤条件。
如果ph值:
qs=qs.filter(phonenumber=ph)
2.2过滤方法
参见由函数定义的参数请求:
当Django框架在url路由与函数匹配后调用函数时,它会向参数变量request传入一个Httprequest对象,该对象包含所请求的数据信息。
HTTP Get请求url中的参数(术语是querystring中的参数)可以通过HttpRequest对象的Get属性获得。这是一个类似字典的物体。
例如,要获取querystring中的phonenumber参数,可以如下所示:
ph=请求。GET.get(电话号码,无)
传递给None的第二个参数指示如果querystring中没有phonenumber参数,则不会返回任何参数。
然后,通过调用QuerySet对象的filter方法,可以添加查询筛选条件:
qs=qs.filter(phonenumber=ph)
有了这个过滤条件,Django将通过在底层执行数据库查询的SQL语句中添加相应的where子句来过滤查询。
注意,参数名phonenumber与定义的表模型的属性名phonenumber是一致的。
可以有多个过滤条件的过滤器,只要你在下面的参数中继续添加过滤条件。
例如:
QS=QS.filter(电话号码=pH,地址=山东日照)
这样,您可以根据地址字段和电话号码字段进行筛选。
2.3带约束的url
现在,在浏览器中输入以下url:
http://127 . 0 . 0 . 1:8080/销售/客户/?电话号码=18300396393
这次访问的结果如下:
您可以看到过滤条件已经生效。
来自博客作者为梦想原创作品。转载请联系作者取得授权,否则将追究法律责任。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。