Java十分钟精通Log4j日志的使用
300
2022-08-22
Python Web开发(五):读取数据库数据
@TOC
一、获取全部记录
1.1增加客户
1.2获取所有表记录
我们先实现一个函数,来处理浏览器发出的URL为 sales/customers/ 的访问请求, 我们需要返回 数据库中 customer 表 所有记录。’Django 中 对数据库表的操作, 应该都通过 Model对象 实现对数据的读写,而不是通过SQL语句。比如,这里我们要获取 customer 表 所有记录, 该表是和我们前面定义的 Customer 类管理的。我们可以这样获取所有的表记录。在文件sales/views.py 中,定义一个listcustomers 函数,内容如下:
# 导入 Customer 对象定义
from common.models import Customer
def listcustomers(request):
# 返回一个 QuerySet 对象 ,包含所有的表记录
# 每条表记录都是是一个dict对象,
# key 是字段名,value 是 字段值
qs = Customer.objects.values()
# 定义返回字符串
retStr = ''
for customer in qs:
for name,value in customer.items():
retStr += f'{name} : {value} | '
#
表示换行
retStr += '
'
return HttpResponse(retStr)
Customer.objects.values() 就会返回一个 QuerySet 对象,这个对象是Django 定义的,在这里它包含所有的Customer 表记录。QuerySet 对象 可以使用 for 循环遍历取出里面所有的元素。每个元素 对应 一条表记录。每条表记录元素都是一个dict对象,其中 每个元素的 key 是表字段名,value 是 该记录的字段值上面的代码就可以将 每条记录的信息存储到字符串中 返回给 前端浏览器。
1.3修改路由表
我们还需要修改路由表, 加上对 sales/customers/ url请求的 路由。前面,我们在bysms\urls.py 主路由文件中,已经有如下的记录了:
# 凡是 url 以 sales/ 开头的, # 都根据 sales.urls 里面的 子路由表进行路由 path('sales/', include('sales.urls')),
这条URL记录,指明 凡是 url 以 sales/ 开头的,都根据 sales.urls 里面的 子路由表进行路由。我们只需修改 sales/urls.py 即可,添加如下记录:
path('customers/', views.listcustomers),
二、过滤条件
2.1 什么是过滤条件
有的时候,我们需要根据过滤条件查询部分客户信息。比如,当用户在浏览器输入 /sales/customers/?phonenumber=13000000001 ,要求返回电话号码为 13000000001 客户记录。我们可以通过 filter 方法加入过滤条件,修改view里面的代码,如下所示:
def listcustomers(request):
# 返回一个 QuerySet 对象 ,包含所有的表记录
qs = Customer.objects.values()
# 检查url中是否有参数phonenumber
ph = request.GET.get('phonenumber',None)
# 如果有,添加过滤条件
if ph:
qs = qs.filter(phonenumber=ph)
# 定义返回字符串
retStr = ''
for customer in qs:
for name,value in customer.items():
retStr += f'{name} : {value} | '
#
表示换行
retStr += '
'
return HttpResponse(retStr)
与刚才不同的是,我们加入了一段过滤条件:
# 检查url中是否有参数phonenumber ph = request.GET.get('phonenumber',None) # 如果有,添加过滤条件 if ph: qs = qs.filter(phonenumber=ph)
2.2过滤方法
看到函数定义的参数 request了:Django 框架在 url 路由匹配到函数后, 调用函数时,会传入 一个 HttpRequest 对象给参数变量 request,该对象里面 包含了请求的数据信息。HTTP 的 Get 请求url里面的参数(术语叫 querystring 里面的参数), 可以通过HttpRequest对象的 GET 属性获取。这是一个类似dict的对象。
比如要获取querystring里面的 phonenumber 参数 ,就可以像这样:
ph = request.GET.get('phonenumber',None)
第二个参数传入 None 表示,如果没有 phonenumber 参数在 querystring中 ,就会返回 None。然后通过调用 QuerySet 对象的filter方法,就可以把查询过滤条件加上去:
qs = qs.filter(phonenumber=ph)
有了这个过滤条件,Django 会在底层执行数据库查询的SQL语句 加上相应的 where 从句,进行过滤查询。注意,参数名 phonenumber 是和 定义的表 model 的属性名 phonenumber 一致的。filter的过滤条件可以有多个,只要继续在后面的参数添加过滤条件即可。比如:
qs = qs.filter(phonenumber=ph,address='山东日照')
这样就 除了 根据电话号码字段过滤,还有根据 地址字段过滤。
2.3有约束的url
现在在浏览器输入如下 url:
http://127.0.0.1:8080/sales/customers/?phonenumber=18300396393
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~