Django学习(四)表单,让数据库更强大

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介:   表单,在HTML中的标签为,在网页中主要负责数据采集功能。我们在浏览网站时,常常会碰到注册账号、账号登录等,这就是表单的典型应用。

  表单,在HTML中的标签为<form></form>,在网页中主要负责数据采集功能。我们在浏览网站时,常常会碰到注册账号、账号登录等,这就是表单的典型应用。

  在Django学习(2)数据宝库中,我们学习了Django与MySQL数据库的连接;在Django学习(3)模板定制中,我们学习了利用Django的模板将HTML设计与Python代码分离开来。这次,我们将要学习如何利用表单在网页上直接操作MySQL数据库。

  我们延续Django学习(2)数据宝库的Book项目,首先新建项目Book,并在Book项目中新建应用books:

cd /home/vagrant/django_project/
django-admin.py startproject Book
cd ./Book
django-admin.py startapp books

  在settings.py中添加app,并设置数据库连接为MySQL以及模板的查找路径:
设置settings.py
  在books的models.py中定义模型,代码如下:

from django.db import models

class MYBOOK(models.Model):
    name = models.CharField(max_length=200)
    price = models.FloatField()

    def __str__(self):
       return self.name+':'+str(self.price)

  并在MySQL中新建数据库Book,然后将Django中的模型与MySQL中的Book数据库连接:

python3 manage.py makemigrations
python3 manage.py migrate

  这时会在MySQL中生成books_mybook表格。为了在网页中利用表单操作books_mybook表格,我们写了两个HTML模板,一个是数据插入和查询模板:index.html,一个是查询结果模板:search_res.html。其中index.html模板如下:

<!DOCTYPE html>
<html>
    <body>

    <p>**********************************************</p>

    <p>Input name and price of a book:</p>

    <form action="/insert/" method="get">
            name: <input type="text" name="name"> <br>
            price: <input type="text" name="price"> <br>
            <input type="submit" value="提交到MySQL">
    </form>

        <p>
        {% if name  and price%}
             <script>alert("Insert into MySQL already!Please check MySQL")</script>   
        {% endif %}
        </p>

    <p>**********************************************</p>

    <p>Query the price of a book:</p>

    <form action="/query/" method="get">
            Book name: <input type="text" name="book"> <br>
            <input type="submit" value="查询价格">
    </form>

    <p>**********************************************</p>

    </body>
</html>

  search_res.html模板如下:

<p>You searched for: <strong>{{ query }}</strong></p>

{% if books %}
    <p>Found {{ books|length }} book{{ books|pluralize }}.</p>
    <ul>
        {% for book in books %}
        <li>Book: <strong>{{ book.name }}</strong>,   Price: <strong>{{book.price}}</strong></li>
        <br>
        {% endfor %}
    </ul>
{% else %}
    <p>No books matched your search criteria.</p>
{% endif %}

  有了以上两个模板,我们就有了网页展示的模板。接下来,我们需要创建视图,views.py代码如下:

from django.http import HttpResponse
from django.shortcuts import render_to_response
from books.models import MYBOOK

def index(request):
    return render_to_response('index.html')

def insert(request):
    NAME = request.GET['name']
    PRICE = float(request.GET['price'])
    MYBOOK.objects.create(name=NAME, price=PRICE)
    return render_to_response('index.html', {'name':NAME, 'price': PRICE})

def query(request):
    query = request.GET['book']
    books = MYBOOK.objects.filter(name__icontains = query)
    return render_to_response('search_res.html', {'query':query, 'books': books}

在上述视图中,index()加载原始的index.html网页,insert()则插入书籍的名称和价格信息,提交后会弹出对话框,显示“Insert into MySQL already!Please check MySQL”,query()则显示查询结果,该查询为正则查询,返回所有包含‘book’参数的书籍的名称和价格,暂时不考虑书籍名称不存在的情形。
  最后,我们只需要设置好url.py文件,并启动server服务器即可。其中urls.py代码如下:

from django.conf.urls import include, url
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'^form', 'books.views.index'),
    url(r'^insert', 'books.views.insert'),
    url(r'^query', 'books.views.query'),
]

  启动服务器python3 manage.py runserver 8000,在浏览器中输入localhost:8000/form,网页显示如下:
网页表单
  首先,我们先插入第一本书的信息,如下网页:
插入数据
弹出的消息框如下:
消息框
  这样我们就完成了第一本书的插入。按照此步骤,我们再插入9本书,它们分别为:[(‘Learning Pyspark’,35), (‘Dive into Scala’, 36), (‘Think in Java’, 46), (‘An introduction to Python’,35),(‘Learning Pandas’,24), (‘Learn Python in 7 Days’,28),(‘Python GUI Programming Cookbook’,38),(‘Python Data Structures and Algorithms’,45),(‘Python Machine Learning By Example’,50)].在MySQL中查看,表格如下:
MySQL中books_mybook表格
这样就插入了十条记录。然后我们在刚才的网页进行查询,页面如下:
查询
点击查询价格按钮,显示的页面如下:
查询结果
搜索效果还是可以的嘛~~
  这样我们就利用表单(form)完成了在网页层面对数据库的操作,所以说,表单,让数据库更强大~~
  当然,这只是一个简单的利用表单的例子,还有很多未实现的功能,如表单验证,查询错误处理等,相信机智如你,在读者这篇文章后,一定能够自己实现的~~



参考文献:
1. 自强学堂 Django 表单: https://code.ziqiangxuetang.com/django/django-forms.html
2. Django_中文教程.pdf: http://download.csdn.net/download/huangzhichang13/8177581

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
27天前
|
数据管理 数据库 数据安全/隐私保护
Django—同一项目不同app使用不同数据库
在Django项目中实现不同app使用不同数据库的配置,可以通过配置多数据库、创建数据库路由和配置路由来实现。通过这种方法,可以有效地将数据隔离到不同的数据库,提高数据管理的灵活性和系统的可扩展性。希望本文能为开发者在Django项目中使用多数据库提供清晰的指导。
22 4
|
2月前
|
存储 JSON NoSQL
学习 MongoDB:打开强大的数据库技术大门
MongoDB 是一个基于分布式文件存储的文档数据库,由 C++ 编写,旨在为 Web 应用提供可扩展的高性能数据存储解决方案。它与 MySQL 类似,但使用文档结构而非表结构。核心概念包括:数据库(Database)、集合(Collection)、文档(Document)和字段(Field)。MongoDB 使用 BSON 格式存储数据,支持多种数据类型,如字符串、整数、数组等,并通过二进制编码实现高效存储和传输。BSON 文档结构类似 JSON,但更紧凑,适合网络传输。
82 15
|
2月前
|
SQL 定位技术 数据库
深入探索Django ORM:高效数据库操作的秘诀####
本文旨在为读者揭开Django ORM(对象关系映射)的神秘面纱,通过一系列生动的比喻和详实的案例,深入浅出地讲解其核心概念、工作原理及高级特性。我们将一起探讨如何利用Django ORM简化数据库交互,提升开发效率,同时确保数据的一致性和安全性。不同于传统的技术文档,本文将以故事化的形式,带领读者在轻松愉快的氛围中掌握Django ORM的精髓。 ####
|
4月前
|
IDE 关系型数据库 MySQL
Django学习一:创建Django框架,介绍Django的项目结构和开发逻辑。创建应用,编写主包和应用中的helloworld
这篇文章是关于如何创建一个Django框架,介绍Django的项目结构和开发逻辑,并指导如何创建应用和编写“Hello, World!”程序的教程。
300 3
Django学习一:创建Django框架,介绍Django的项目结构和开发逻辑。创建应用,编写主包和应用中的helloworld
|
4月前
|
SQL NoSQL 关系型数据库
数据库学习
【10月更文挑战第8天】
44 1
|
4月前
|
SQL Java 数据库
Django学习三:views业务层中通过models对实体对象进行的增、删、改、查操作。
这篇文章是关于如何使用Django框架的ORM系统在视图(views)层面进行数据库的增、删、改、查操作的教程。
44 0
Django学习三:views业务层中通过models对实体对象进行的增、删、改、查操作。
|
4月前
|
关系型数据库 MySQL Java
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
这篇文章是关于如何使用Django框架配置MySQL数据库,创建模型实例,并自动或手动创建数据库表,以及对这些表进行操作的详细教程。
148 0
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
|
4月前
|
Java 关系型数据库 MySQL
springboot学习五:springboot整合Mybatis 连接 mysql数据库
这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
653 0
springboot学习五:springboot整合Mybatis 连接 mysql数据库
|
8月前
|
关系型数据库 MySQL 数据库
Django与MySQL:配置数据库的详细步骤
Django与MySQL:配置数据库的详细步骤
|
8月前
|
缓存 运维 Serverless
Serverless 应用引擎产品使用合集之基于django应用模板创建的FC,如何配置数据库
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。

热门文章

最新文章