Django入门(四) 简单操作数据库

时间:2022-09-12 14:55:23

    经过前面三节的练习,我们已经可以将一个页面动态的展现给用户了。但是真正动态语言还需要连接数据库,将数据库中的内容读取出来呈现在给客户。这一节我们就来实现简单的读写数据库,对数据库进行增删改查等操作。

    前面我们讲过django有一个全局的配置文件settings.py,这个文件位于子目录myjango下面。通过这个文件我们可以指定mydjango这个项目使用的数据库类型以及数据库的连接信息。

Django入门(四)  简单操作数据库默认的使用的数据库类型是sqlite3,这里我就不做修改了。如果想连接oracle或者mysql等数据库类型可以自行百度一下。


数据库连接的问题解决之后,我们下一步就是对数据库进行创建表的操作了。django中对数据库的操作有一个专门文件models.py,它位于每个app应用目录的下面,负责管理这个应用的数据库操作。

Django入门(四)  简单操作数据库

编辑这个文件

models.py

# !/usr/local/env python# coding:utf-8
from __future__ import unicode_literals
# 首先要导入models方法
from django.db import models
# Create your models here.
"""
编写一个类,类里的参数必须是(models.Model)
类的名字就是要在数据库创建的表名字
"""
class userinfo(models.Model):
    """
    这里的user和passwd就是表中要创建的字段名
    models.CharField表示要创建的字段类型是字符串类型的
    如果创建字符窜类型那么括号里必须指定字符串长度
    """
    user = models.CharField(max_length=30)
    passwd = models.CharField(max_length=30)


编辑结束之后,我们通过同步数据库的命令创建刚才定义的表。在命令行下输入两条命令

1、python manage.py makemigrations

Django入门(四)  简单操作数据库

这个命令相当于创建了表的源数据,执行完这条命令并没有真正的把表创建出来。只是在app01目录下的

migrations目录下创建了一个初始化文件

Django入门(四)  简单操作数据库


2、python manage.py migrate

Django入门(四)  简单操作数据库

这个命令是根据上一步创建的源文件里的规则,把我们定义的表真的的写到数据库里。



如何来查看表是否按照我的需求创建成功了呢?我们可以通过第三方的工具连接数据库进行查看,也可以使用django自带的方法。对查看数据库的内容。我们来设置一下。在app01目录下找到admin.py

Django入门(四)  简单操作数据库

编辑文件的内容

admin.py

# !/usr/bin/env python# coding:utf-8from django.contrib import admin# Register your models here.#导入自定义的表名from app01 import modelsadmin.site.register(models.userinfo)

这样我们就可以访问app01的数据库后台页面了

Django入门(四)  简单操作数据库

Django入门(四)  简单操作数据库

接着我们要登录到后台,还需要在通过命令创建后台管理页面的账号和密码

python manage.py createsuperuser

Django入门(四)  简单操作数据库

密码长度不能低于8位


再次重新登录输入用户名和密码  我们就可以进入后台页面了。并且可以看到我们刚才刚才创建的userinfo表

Django入门(四)  简单操作数据库

这个表被默认添加了一个's'变成userinfos了(不知道为什么),不过使用的时候还是要用userinfo表这个名字。点进去之后我们就可以对这个表添加数据了

Django入门(四)  简单操作数据库

到这里,表和表里的数据我们就添加完了。接下来我们要通过自己都编写的页面实现对数据库的简单读写。


首先在template目录下新建一个manageruser.index文件。在文件里需要有用户名和密码输入框。一个按钮还有一个表格。并且表格需要用到模版语言能够动态的显示指定的内容。

manageruser.html

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title></title></head><body><div class="container">{#    定义表单提交的时候采用POST方式提交,并且提交之后还是跳转回本页。#}{#    相当于提交之后刷新自己#}    <form action="/manageruser/" method="post">        <div class="form-group">            <label>用户名</label>            #    通过name="xxx"来给输入框定义一个标识,会用到这个表示来区分输入框的内容#}            <input type="text" class="form-control" name="username" placeholder="请输入用户名">        </div>        <div class="form-group">            <label>密码</label>            <input type="password" class="form-control" name="passwd" placeholder="请输入密码">        </div>        <div class="form-group">            <label class="sr-only">按钮</label>            <input class="btn btn-primary" type="submit" value="提交">        </div>        <table class="table table-bordered">            <thead>                <tr>                    <th>用户名</th>                    <th>密码</th>                </tr>            </thead>            <tbody>    {#            views.py中的manageruser()函数会读取数据库中指定的数据#}    {#            并传递给userinfo#}                {% for line in userinfo %}                    <tr>    {#                模板语言每次读取一行数据#}    {#                并根据model.py指定的数据库表中的字段名来获取对应的值#}                        <td>{{ line.user }}</td>                        <td>{{ line.passwd }}</td>                    </tr>                {% endfor %}            </tbody>        </table>    </form></div></body></html>


第二步就是要去app01目录下编辑views.py。我们知道浏览器对web框架发起请求有两种方式get和post。

默认的请求是get方式,而我们刚才已经定义了涉及表单内容的提交的内容请求采用post方式。那现在我们就来根据需求编写用到的manageruser()函数。

views.py

def manageruser(request):    # 首先判断页面的请求方式    #如果是POST就表明有表单内容要提交    if request.method=='POST':        #根据html文件里输入框的name属性所定义的值来获取数据        username=request.POST['username'].strip()        passwd=request.POST['passwd'].strip()        #实现添加用户功能   models.userinfo.objects部分是标准搭配必须要存在        # 通过django操作数据库必须以这部分开头,后面的create()是参数        models.userinfo.objects.create(user=username, passwd=passwd)        #实现删除指定用户功能        #models.userinfo.objects.filter(user=username).delete()        # 实现更新指定用户密码的功能        #models.userinfo.objects.filter(user=username).update(passwd=passwd)    #如果是GET就表示只是普通的浏览请求,不对数据库进行任务操作    else:        pass    #最后将数据库的全部内容都读入到user_info中    userinfo= models.userinfo.objects.all()    #将页面最终的内容传递给用户,传递的同时将获取的数据库内容传入给html的userinfo变量    return render(request,'manageruser.html',{'userinfo':userinfo})


最后一步就是要去mydjango子目录的urls.py中添加页面和函数的绑定关系了

urls.py

from django.conf.urls import urlfrom django.contrib import adminfrom app01 import viewsurlpatterns = [    url(r'^admin/', admin.site.urls),    url(r'^index/$', views.index),    url(r'^user/$', views.user),    url(r'^manageruser/$', views.manageruser),]


最后启动服务程序,查看页面运行情况

Django入门(四)  简单操作数据库


因为默认采用的是GET方法访问页面,所以我们看到了数据库里刚刚创建的用户。我们在用户名和密码栏中输入一个新的数据。点击提交按钮出发POST方法访问看看能否将新数据写入数据库

Django入门(四)  简单操作数据库

提交之后我们看到新的数据已经写入了数据库

Django入门(四)  简单操作数据库

现在我们就完成了通过Django简单操作数据库并将数据库内容展现在页面的操作


备注:如果点击提交按钮的时候出现403错误,这是因为django的中间件有一条伪造跨站请求导致的,现阶段我们可以禁用这条配置。修改mydjango子目录的下的settings.py内容如下:

Django入门(四)  简单操作数据库修改之后,再点击提交按钮就不会出现403错误了


本文出自 “霹雳豆包” 博客,谢绝转载!