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

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

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

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

编辑这个文件

models.py

# !/usr/local/env python# coding:utf-8from __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

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

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

2、python manage.py migrate

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

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

编辑文件的内容

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的数据库后台页面了

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

python manage.py createsuperuser

密码长度不能低于8位

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

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

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

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

manageruser.html

    
    
{#    定义表单提交的时候采用POST方式提交,并且提交之后还是跳转回本页。#}{#    相当于提交之后刷新自己#}    
        
            
            #    通过name="xxx"来给输入框定义一个标识,会用到这个表示来区分输入框的内容#}            
                
            
            
                
            
按钮            
                
                                                用户名                    密码                                            {#            views.py中的manageruser()函数会读取数据库中指定的数据#}    {#            并传递给userinfo#}                {% for line in userinfo %}                        {#                模板语言每次读取一行数据#}    {#                并根据model.py指定的数据库表中的字段名来获取对应的值#}                        { { line.user }}                        { { line.passwd }}                                    {% endfor %}                        

第二步就是要去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),]

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

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

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

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

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

修改之后,再点击提交按钮就不会出现403错误了