这一篇教程,我们一起来使用Django通过HTML页面进行数据库的访问。
首先,我们先来看一下页面中的功能。
这些功能包括:
查询数据库中所有商品数据; 查询数据库中指定名称的商品数据; 查询数据库中指定价格区间的商品数据; 查询数据库中的指定数据并排序。在开始编写这些功能之前,我们先来准备数据库中的数据。
在上一篇教程的基础上,我们在已创建好的数据表中添加更多的数据。
铅笔,10,1.5 橡皮,20,0.5 直尺,15,2.4 作业本,18,2.5 笔记本,21,6.2 钢笔,35,9.9 铅笔盒,33,12.5 墨水,12,5.0 曲别针,9,1.0 订书器,18,8.0 订书钉,15,3.6 裁纸刀,12,7.5 签字笔,20,6.8 签字笔芯,50,3.5 自动铅笔,32,4.2 自动笔芯,36,2.1
这些数据如果通过命令行终端手动添加的话,实在是太累了。
我们可以打开PyCharm,在应用文件夹中新建(New)一个文件(File),命名为“data”,把这些数据保存在文件中。
然后再新建(New)一个Python文件(Python File)编写一个脚本,进行数据导入。
示例代码:
from MySite.models import Goods with open('data', 'r', encoding='utf-8') as file: # 打开文件创建文件对象(注意编码) for line in file: # 读取每一行 lst = line.strip().split(',') # 将每一行中的商品信息转换为列表 state = Goods.objects.create(goods_name=lst[0], goods_number=lst[1], goods_price=lst[2]) # 添加数据到数据库 print(state) # 显示输出添加数据的结果
然后,我们运行脚本代码。
这时候,大家会看到引发了一个异常:django.core.exceptions.AppRegistryNotReady: Apps aren’t loaded yet.(应用程序没有载入)
这是因为,我们使用的是Django框架,进行数据库的操作,需要框架的支持。
而我们单独运行写好的脚本时,Django框架没有被启动,这就会导致异常发生。
所以,在刚才脚本代码的开始,我们加入以下代码:
示例代码:
import os import django os.environ.setdefault("DJANGO_SETTINGS_MODULE", "MyWeb.settings") # 关联默认设置 django.setup() # 装载Django
注意,程序代码的执行是从上至下的,所以这段代码一定要放在前一段代码的上方。
这样,在Django启动后,才会导入Goods,不会引发异常。
当我们执行完上方代码,会看到多个类似“Goods object (编号)”的结果,这些结果表名数据添加是有效的,结果中的编号是因为我们创建数据表的时候没有指定主键,数据库自动给添加的id列作为主键。
这里给大家推荐一款小工具:sqlite studio。【 点此下载 】
这款工具,能够打开SQLite的数据文件,进行可视化操作。(注意不要把这个工具放在中文目录下,否则会报错,无法打开!)
添加好了数据之后,接下来,我们分步完成各个功能。
一、创建模板
1、首页模板
我们在模板文件夹中新建模板文件“index.html”,并在这个文件中添加4个表单。
示例代码:(index.html)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>首页</title> </head> <body> <h3>商品查询</h3> <form action="/all/" method="GET"> <input type="submit" value="查询全部"> </form> <br> <form action="/search_name/" method="GET"> <input type="text" name="goods_name"> <input type="submit" value="名称查询"> </form> <br> <form action="/search_price/" method="GET"> <input type="text" name="min_price"> <input type="text" name="max_price"> <input type="submit" value="价格区间查询"> </form> <br> <form action="/search_sort/" method="GET"> <input type="radio" name="sort" value="all_asc" checked>查询全部并升序排列 <input type="radio" name="sort" value="all_desc">查询全部并降序排列 <input type="radio" name="sort" value="result_asc">条件查询并升序排列 <input type="submit" value="排序查询"> </form> </body> </html>
如上方代码所示,每个表单“form”都有不同“action”属性,这些属性就是点击提交“submit”按钮时,打开的URL。
并且,在这些表单中添加了不同的“input”标签,形成了不同的表单内容。
“input”标签中的“name”属性就是URL中参数的名称,而“value”属性或文本框中输入的内容就是参数的值。
以第2个表单为例,当点击提交按钮时,就会打开URL“http://IP:端口号(或域名)/search_name/?goods_name=文本框中的输入内容”
查看更多关于Django2:Web项目开发入门笔记(8)的详细内容...