Python Web开发(五):读取数据库数据

简介: Python Web开发(五):读取数据库数据

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

一、获取全部记录
1.1增加客户
现在我们来实现一个功能:浏览器访问 sales/customers/ ,我们的服务端就返回系统中所有的客户记录给浏览器。
首先我们增加两个客户:(这里看不懂的话,可以去看第四节)
此时就直接在我们的数据库管理中,出现了客户信息:

也可以直接通过数据库里面的添加功能,在数据库里面添加。

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} | '

    # <br> 表示换行
    retStr += '<br>'
return HttpResponse(retStr)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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')),

1
2
3
这条URL记录,指明 凡是 url 以 sales/ 开头的,都根据 sales.urls 里面的 子路由表进行路由。我们只需修改 sales/urls.py 即可,添加如下记录:

path('customers/', views.listcustomers),
1

大家可以使用 admin 登录, 再添加一些 客户记录。
然后可以在浏览器输入如下 网址: http://127.0.0.1:8080/sales/customers/
回车后,浏览器显示结果类似如下:

和我们数据库中的记录信息一致。
此时我们通过F12进行抓包处理:

会发现此时的
就是我们的换行指令。

二、过滤条件
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} | '
    # <br> 表示换行
    retStr += '<br>'

return HttpResponse(retStr)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
与刚才不同的是,我们加入了一段过滤条件:

# 检查url中是否有参数phonenumber

ph =  request.GET.get('phonenumber',None)

# 如果有,添加过滤条件
if ph:
    qs = qs.filter(phonenumber=ph)

1
2
3
4
5
6
2.2过滤方法
看到函数定义的参数 request了:
Django 框架在 url 路由匹配到函数后, 调用函数时,会传入 一个 HttpRequest 对象给参数变量 request,该对象里面 包含了请求的数据信息。
HTTP 的 Get 请求url里面的参数(术语叫 querystring 里面的参数), 可以通过HttpRequest对象的 GET 属性获取。这是一个类似dict的对象。

比如要获取querystring里面的 phonenumber 参数 ,就可以像这样:

ph = request.GET.get('phonenumber',None)
1
第二个参数传入 None 表示,如果没有 phonenumber 参数在 querystring中 ,就会返回 None。
然后通过调用 QuerySet 对象的filter方法,就可以把查询过滤条件加上去:

qs = qs.filter(phonenumber=ph)
1
有了这个过滤条件,Django 会在底层执行数据库查询的SQL语句 加上相应的 where 从句,进行过滤查询。
注意,参数名 phonenumber 是和 定义的表 model 的属性名 phonenumber 一致的。
filter的过滤条件可以有多个,只要继续在后面的参数添加过滤条件即可。
比如:

qs = qs.filter(phonenumber=ph,address='山东日照')
1
这样就 除了 根据电话号码字段过滤,还有根据 地址字段过滤。

2.3有约束的url
现在在浏览器输入如下 url:

http://127.0.0.1:8080/sales/customers/?phonenumber=18300396393
1
访问结果如下:

可以发现过滤条件生效了。

目录
相关文章
|
5天前
|
算法 测试技术 开发者
性能优化与代码审查:提升Python开发效率
【10月更文挑战第12天】本文探讨了Python开发中性能优化和代码审查的重要性,介绍了选择合适数据结构、使用生成器、避免全局变量等性能优化技巧,以及遵守编码规范、使用静态代码分析工具、编写单元测试等代码审查方法,旨在帮助开发者提升开发效率和代码质量。
16 5
|
11天前
|
Web App开发 前端开发 JavaScript
探索Python科学计算的边界:利用Selenium进行Web应用性能测试与优化
【10月更文挑战第6天】随着互联网技术的发展,Web应用程序已经成为人们日常生活和工作中不可或缺的一部分。这些应用不仅需要提供丰富的功能,还必须具备良好的性能表现以保证用户体验。性能测试是确保Web应用能够快速响应用户请求并处理大量并发访问的关键步骤之一。本文将探讨如何使用Python结合Selenium来进行Web应用的性能测试,并通过实际代码示例展示如何识别瓶颈及优化应用。
42 5
|
2天前
|
人工智能 IDE 测试技术
使用通义灵码提升Python开发效率:从熟悉代码到实现需求的全流程体验
作为一名Python开发者,我最近开始使用通义灵码作为开发辅助工具。它显著提高了我的工作效率,特别是在理解和修改复杂代码逻辑方面。通过AI编码助手,我能够在短时间内快速上手新项目,实现新需求,并进行代码优化,整体效率提升了60%以上。通义灵码不仅加快了代码生成速度,还增强了代码的健壮性和稳定性。
|
2天前
|
JSON 搜索推荐 API
Python的web框架有哪些?小项目比较推荐哪个?
【10月更文挑战第15天】Python的web框架有哪些?小项目比较推荐哪个?
10 1
|
5天前
|
安全 数据库 C++
Python Web框架比较:Django vs Flask vs Pyramid
Python Web框架比较:Django vs Flask vs Pyramid
13 4
|
6天前
|
Web App开发 SQL 数据库
使用 Python 解析火狐浏览器的 SQLite3 数据库
本文介绍如何使用 Python 解析火狐浏览器的 SQLite3 数据库,包括书签、历史记录和下载记录等。通过安装 Python 和 SQLite3,定位火狐数据库文件路径,编写 Python 脚本连接数据库并执行 SQL 查询,最终输出最近访问的网站历史记录。
17 4
|
7天前
|
安全 数据库 C++
Python Web框架比较:Django vs Flask vs Pyramid
【10月更文挑战第10天】本文比较了Python中三个最受欢迎的Web框架:Django、Flask和Pyramid。Django以功能全面、文档完善著称,适合快速开发;Flask轻量灵活,易于上手;Pyramid介于两者之间,兼顾灵活性和安全性。选择框架时需考虑项目需求和个人偏好。
18 1
|
11天前
|
SQL 机器学习/深度学习 数据采集
SQL与Python集成:数据库操作无缝衔接22.bijius.com
自动化数据预处理:使用Python库(如Pandas)自动清洗、转换和准备数据,为机器学习模型提供高质量输入。 实时数据处理:集成Apache Kafka或Amazon Kinesis等流处理系统,实现实时数据更新和分析。
|
11天前
|
安全 数据库 C++
Python Web框架比较:Django vs Flask vs Pyramid
【10月更文挑战第6天】本文比较了Python中三个最受欢迎的Web框架:Django、Flask和Pyramid。Django功能全面,适合快速开发;Flask灵活轻量,易于上手;Pyramid介于两者之间,兼顾灵活性和可扩展性。文章分析了各框架的优缺点,帮助开发者根据项目需求和个人偏好做出合适的选择。
21 4
|
10天前
|
网络协议 Python
使用Python开发简单的聊天应用
使用Python开发简单的聊天应用
18 0