开发者社区> jclian91> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

简介:   表单,在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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【Django学习笔记 - 11】:模板的继承、模型类和数据库
【Django学习笔记 - 11】:模板的继承、模型类和数据库
0 0
django数据库报错汇总:django.db.utils.OperationalError 1045,1049,2003
django数据库报错汇总:django.db.utils.OperationalError 1045,1049,2003
0 0
【Django | 开发】 面试招聘信息网站(为已有数据库生成管理后台)
【Django | 开发】 面试招聘信息网站(为已有数据库生成管理后台)
0 0
Django-Multitenant,分布式多租户数据库项目实战(Python/Django+Postgres+Citus)
Django-Multitenant,分布式多租户数据库项目实战(Python/Django+Postgres+Citus)
0 0
【Django框架】学习及其【数据库对接技术】 学习&&开发笔记【入门篇】
【Django框架】学习及其【数据库对接技术】 学习&&开发笔记【入门篇】
0 0
django models进行数据库增删查改
django models进行数据库增删查改
0 0
Django启航(四)Django配置数据库
Django启航(四)Django配置数据库
0 0
HelloDjango 系列教程:Django 迁移、操作数据库
HelloDjango 系列教程:Django 迁移、操作数据库 文中涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库 我们已经编写了博客数据库模型的代码,但那还只是 Python 代码而已,django 还没有把它翻译成数据库语言,因此实际上这些数据库表还没有真正的在数据库中创建。
688 0
Django数据库基础操作
主键: 是唯一的,通过主键可以准确的找到对应的数据,主键默认非空,为空时自动增长准备sqlite语句: db=sqlite3.connect('xxxxx.db') 创建表格文件: cerate table 表名(字段1名称 字段1类型,字段2名称 字段2类型),例: sql='cerate ta...
443 0
Django搭建服务器,并将数据库中的数据解析为json格式显示在web
Django搭建服务器,并将数据库中的数据解析为json格式显示在web前言编译器 pycharm,环境python3.7、django为最新版本;下载安装python、django(个人认为在cmd用pip下载最好,因人而异,这个下载安装模块比较简单,网上教程很多可以自己来。
1396 0
+关注
jclian91
热爱算法,热爱技术,热爱生活,期待更好的自己与明天~
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载