好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Django2:Web项目开发入门笔记(8)

这一篇教程,我们一起来使用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)的详细内容...

  阅读:15次