zoukankan      html  css  js  c++  java
  • 三、自动化测试平台搭建-django-如何用mysql数据库做web项目

     从这节开始到后面说的大概内容如下:

                这里说的是Django做一个web项目的大概框架,从下篇具体说Django中的模型(查询。。),视图(请求,响应,cookie,session。。),模板(验证码,反向解析。。。),还有一些常用的,静态文件处理,中间件,上传图片,全文检索等等,最后是部署环境(wsgi,nginx)

    前景:django自带的数据库是sqlite3,这是一种轻量级数据库,一般用于手机中,web项目用的大多数还是mysql,这次做一个项目‘图书-英雄’信息管理

    1、在家目录下的Desktop创建一个文件夹,在这个文件夹下创建一个名为pytest1虚拟环境(第一篇已经说过怎么安装虚拟环境)

           (1)cd ~/Desktop

      (2)mkdir project_1

           (3)mkvietualenv -p python3.5 pytest1  #创建虚拟环境

         (4)workon pytest1 #进入虚拟环境

         (5)pip install django=1.8.2 #在虚拟环境中安装需要的包

           (6)django-admin startproject test2  #创建项目test2

          (7)cd test2

            (8)python manage.py startapp booktest  #创建应用booktest,图书信息

            (9)将应用与项目关联,修改如下图

     

    2、django框架默认使用sqlite3数据库,如何让他使用MySQL数据库呢?看下图

    配置代码:

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'test2', #数据库名字,
            'USER': 'root', #数据库登录用户名
            'PASSWORD': 'mysql', #数据库登录密码
            'HOST': 'localhost', #数据库所在主机
            'PORT': '3306', #数据库端口
        }
    }

    3、上面的配置中,数据库test2在django框架下不会自动创建,所以我们要手动进入MySQL数据库去创建
    进入终端 (1)sudo mysql service start #启动mysql
    (2)mysql -uroot -p密码 #连接mysql
    (3)create database test2 charset=utf8;#创建test2数据库

     4、定义模型类(上一篇讲过)

    • 模型类被定义在"应用/models.py"文件中,此例中为"booktest/models.py"文件。
    • 模型类必须继承自Model类,位于包django.db.models中。
    • 提示:对于重要数据使用逻辑删除。

          实例演示:

      (1)打开booktest/models.py,定义模型类如下:

                    

    from django.db import models
    
    #定义图书模型类BookInfo
    class BookInfo(models.Model):
        btitle = models.CharField(max_length=20)#图书名称
        bpub_date = models.DateField()#发布日期
        bread = models.IntegerField(default=0)#阅读量
        bcomment = models.IntegerField(default=0)#评论量
        isDelete = models.BooleanField(default=False)#逻辑删除
    
    #定义英雄模型类HeroInfo
    class HeroInfo(models.Model):
        hname = models.CharField(max_length=20)#英雄姓名
        hgender = models.BooleanField(default=True)#英雄性别
        isDelete = models.BooleanField(default=False)#逻辑删除
        hcomment = models.CharField(max_length=200)#英雄描述信息
        hbook = models.ForeignKey('BookInfo')#英雄与图书表的关系为一对多,所以属性定义在英雄模型类中

          (2)生成迁移文件

                    终端执行命令:python manage,py makemigrations

                    生成迁移文件的时候出现错误,把数据库切换成了mysql,需要安装pymysql模块之后,Django框架才可以操作mysql数据库。安装命令:pip install pymysql -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

                    安装成功之后,在test2/_init_.py文件中加上如下代码:

    import pymysql
    pymysql.install_as_MySQLdb()

                 然后执行如下命令:

                                                  python manage.py makemigrations  #生成迁移文件:根据模型类生成创建表的迁移文件

                                                  python manage.py migrate   #.执行迁移:根据第一步生成的迁移文件在数据库中创建表

               

             (3)进入数据库查看有没有生成表

            

         (4)在数据库命令行中,复制如下语句执行,向booktest_bookinfo表中插入测试数据:     

    insert into booktest_bookinfo(btitle,bpub_date,bread,bcomment,isDelete) values
    ('射雕英雄传','1980-5-1',12,34,0),
    ('天龙八部','1986-7-24',36,40,0),
    ('笑傲江湖','1995-12-24',20,80,0),
    ('雪山飞狐','1987-11-11',58,24,0);

          再复制如下语句执行,向booktest_heroinfo表中插入测试数据:

    insert into booktest_heroinfo(hname,hgender,hbook_id,hcomment,isDelete) values
    ('郭靖',1,1,'降龙十八掌',0),
    ('黄蓉',0,1,'打狗棍法',0),
    ('黄药师',1,1,'弹指神通',0),
    ('欧阳锋',1,1,'蛤蟆功',0),
    ('梅超风',0,1,'九阴白骨爪',0),
    ('乔峰',1,2,'降龙十八掌',0),
    ('段誉',1,2,'六脉神剑',0),
    ('虚竹',1,2,'天山六阳掌',0),
    ('王语嫣',0,2,'神仙姐姐',0),
    ('令狐冲',1,3,'独孤九剑',0),
    ('任盈盈',0,3,'弹琴',0),
    ('岳不群',1,3,'华山剑法',0),
    ('东方不败',0,3,'葵花宝典',0),
    ('胡斐',1,4,'胡家刀法',0),
    ('苗若兰',0,4,'黄衣',0),
    ('程灵素',0,4,'医术',0),
    ('袁紫衣',0,4,'六合拳',0);

     5、定义视图

          (1)打开booktest/views.py文件,代码如下:

    from django.shortcuts import render,redirect
    from booktest.models import *
    from datetime import date
    
    #查询所有图书并显示
    def index(request):
        list=BookInfo.objects.all()
        return render(request,'booktest/index.html',{'list':list})
    
    #创建新图书
    def create(request):
        book=BookInfo()
        book.btitle = '流星蝴蝶剑'
        book.bpub_date = date(1995,12,30)
        book.save()
        #转向到首页
        return redirect('/')
    
    #逻辑删除指定编号的图书
    def delete(request,id):
        book=BookInfo.objects.get(id=int(id))
        book.delete()
        #转向到首页
        return redirect('/')

    6、配置url

          (1)打开test2/urls.py文件,配置代码如下:

    from django.conf.urls import include, url
    from django.contrib import admin
    
    urlpatterns = [
        url(r'^admin/', include(admin.site.urls)),
        #引入booktest的url配置
        url(r'^',include('booktest.urls')),
    ]

        (2)在booktest应用下创建urls.py文件,代码如下:

    from django.conf.urls import url
    from booktest import views
    
    urlpatterns=[
        url(r'^$',views.index),
        url(r'^delete(d+)/$',views.delete),
        url(r'^create/$',views.create),
    ]

    7、创建模板

          (1) 打开test2/settings.py文件,配置模板查找目录TEMPLATES的DIRS

              

          (2)在booktest应用下创建temlates/booktest/index.html,如下图

                     

                index.html模板代码如下:

    <html>
    <head>
        <title>复习案例</title>
    </head>
    <body>
    <a href="/create/">创建</a>
    <ul>
    {%for book in list%}
        <li>{{book.btitle}}--<a href="/delete{{book.id}}/">删除</a></li>
    {%endfor%}
    </ul>
    </body>
    </html>

     8、运行服务

         pythonmanage.py runserver 127.0.0.1:7798

    9、在界面做创建或删除,看数据库效果,你会发现数据库会随着界面的创建和删除的改变而改变,这就是我们要达到的效果

     

  • 相关阅读:
    一起谈.NET技术,.Net Discovery系列之深入理解平台机制与性能影响(下) 狼人:
    一起谈.NET技术,Silverlight 2.5D RPG游戏技巧与特效处理:(十二)魔法系统 狼人:
    一起谈.NET技术,.Net Discovery系列之深入理解平台机制与性能影响 (中) 狼人:
    一起谈.NET技术,再次分享一个多选文件上传方案 狼人:
    一起谈.NET技术,Silverlight 2.5D RPG游戏技巧与特效处理:(十一)AI系统 狼人:
    一起谈.NET技术,.NET中的异步编程 IO完成端口以及FileStream.BeginRead 狼人:
    一起谈.NET技术,C#中标准Dispose模式的实现 狼人:
    一起谈.NET技术,DotNet并行计算的使用误区 狼人:
    一起谈.NET技术,.NET中的委托 狼人:
    一起谈.NET技术,ASP.NET MVC3 基础教程 – Web Pages 1.0 狼人:
  • 原文地址:https://www.cnblogs.com/lz-tester/p/10280248.html
Copyright © 2011-2022 走看看