基于Django的动态交互网站的后台开发

本文的实践都是在Windows平台下,请参考以下文章来安装Django。以下练习是基于我做的一个Report Server的简化版,我把最核心的操作都提炼出来,希望对大家有用。
练习题目:case是数据库中的一张表,有两列,分别为case name,case result。建立一个网站,可以在网页中显示出数据库中case的信息,还可以通过case name

http://www.jianshu.com/p/c6dfc12fa72e
练习小提示:

  1. 所有带有python manage.py XXX 的命令都得在新建工程的第一级目录下执行,也就是你运行这个命令必须该目录下有manage.py。下面的练习中如果运行这些命令有问题,请查看路径。

一 新建一个 django project

在Windows cmd中运行下面的命令,建立一个名叫mysite的project。

cd C:\
django-admin startproject mysite
基于Django的动态交互网站的后台开发_第1张图片
新建一个 django project.png

可以看mysite的目录如下,都是默认生成的文件。这里,主目录是mysite,下一级还有一个mysite。在下面的操作中,要注意是在第一级还是第二季的mysite中,这里容易出错。

基于Django的动态交互网站的后台开发_第2张图片
Django新建工程目录结构图.png

二 新建 app

cd C:\mysite
python manage.py startapp case

一般一个项目有多个app, 当然通用的app也可以在多个项目中使用。本文的练习中只需要用到一个app。

三 将app添加到setting.py

将我们新建的应用case添加到 settings.py 中的 INSTALLED_APPS中,也就是告诉Django有这么一个应用。
如下所示,加入'case', 到INSTALLED_APPS.

# Application definition

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'case',
)
基于Django的动态交互网站的后台开发_第3张图片
将case添加到setting.py.png

四 数据库建模

Django 模型是与数据库相关的,与数据库相关的代码一般写在 models.py 中,Django 支持 sqlite3, MySQL, PostgreSQL等数据库,只需要在settings.py中配置即可,不用更改models.py中的代码,丰富的API极大的方便了使用。
如下代码所示,建立了一个class为case,有两个成员属性是name和result。这个类在数据库中就对应了一张表。

from django.db import models

# Create your models here.
# below code is related to my example
class case(models.Model):
    name = models.CharField(max_length=10)
    result = models.CharField(max_length=10)

    def __str__(self):
        return '%s %s' % (self.name, self.result)

    class Meta:
        db_table = 'case'

五 Django数据库配置(Optional)

本文的数据库使用默认的数据库 SQLite3,无需配置。如果你需要用MySQL,可以修改setting.py 的配置如下

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'mostest',
        'USER':'root',
        'PASSWORD':'cisco123',
        'HOST':'10.74.31.149',
        'PORT':'3306',
    }

六 Django 在数据库中生成表

这里我们进行3个步骤在默认的SQLite3中生成第四步中定义的数据表。

  1. python manage.py makemigrations
  2. python manage.py sqlmigrate case 0001
    这一步是查看SQL的语句,运行该命令就可以显示出来。不懂SQL语句没关系,Django会为你生成命令。
  3. python manage.py migrate
    这一步是真正在SQLite3中建立表case。当你在models.py中新增了类时,运行它就可以自动在数据库中创建表了,不用手动创建。
    下面的代码是我在mac运行以上3步的copy,可做参考。
YATYANG-M-T02B:mysite yatyang$ python manage.py makemigrations
Migrations for 'case':
  0001_initial.py:
    - Create model case
YATYANG-M-T02B:mysite yatyang$ python manage.py sqlmigrate case 0001
BEGIN;
CREATE TABLE "case" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "name" varchar(10) NOT NULL, "result" varchar(10) NOT NULL);

COMMIT;
YATYANG-M-T02B:mysite yatyang$ python manage.py migrate
Operations to perform:
  Synchronize unmigrated apps: staticfiles, messages
  Apply all migrations: admin, case, contenttypes, auth, sessions
Synchronizing apps without migrations:
  Creating tables...
    Running deferred SQL...
  Installing custom SQL...
Running migrations:
  Rendering model states... DONE
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying case.0001_initial... OK
  Applying sessions.0001_initial... OK

下图是在Windows中运行以上三条命令的截图。


基于Django的动态交互网站的后台开发_第4张图片
Django在数据库中生成表.png

七 Django shell操作数据库表

Django shell提供了丰富的API, 下面演示如何使用它。

python manage.py shell

Django 会自动进入在settings.py中设置的数据库,如果是 MySQL 或 postgreSQL,会要求输入数据库用户密码。

在这个终端可以执行ORM的命令对数据库进行操作。或者直接运行数据库的SQL语句这个不在本文的练习范围内。

  1. 在shell终端导入case类
from case.models import case
  1. 查看数据库中case表的数据,此时数据库中的case表为空。
case.objects.all() 
  1. 在case中添加一条数据。
c = case(name='live1',result='PASS')
c.save()
  1. 查看case表中的数据以及数据结构等。
all_case = case.objects.all()
print all_case
print all_case[0]
print type(all_case)
search_case = case.objects.filter(name='live1')
基于Django的动态交互网站的后台开发_第5张图片
Django shell操作数据库.png

八 Django 定义view函数:HTTP GET Request实例

Django中网址是写在 urls.py 文件中,用正则表达式对应 views.py 中的一个函数。我们先来定义我们的view函数。
view函数中的返回都用json这种格式。
在view.py中我们会定义两个函数,一个是HTTP GET函数,根据已有的case的name去数据库中查询,并返回相应的结果。
request.GET.get是获取http url中的query string,就是客服端要传给服务器的参数,比如本例中就是我需要查询case的name是live1,就把live1传给服务器。

from django.http import HttpResponse
import json
from .models import case

def get_case(request):
    name1 = request.GET.get('name')
    cases = case.objects.filter(name=name1)

    data = []
    for c in cases:
        data.append({'name':c.name, 'result':c.result})

    return HttpResponse(json.dumps(data), content_type="application/json")

九 Django定义URL.py

在case文件夹内,创建一个新的urls.py文件,输入以下代码。
这里有url的正则表达式匹配,我们用最简单的方式,名字全匹配。如果url里面带有get_case名字的就去找view.py中的get_case函数。

from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'get_case', views.get_case, name='get_case'),
]

我们打开 mysite/mysite/urls.py 这个文件, 添加了最后一行代码。这个是让Django的主urls.py去识别case app中的子urls.py文件。意思是只要url中带有case关键字,就去找case app中的子urls.py文件中查看url匹配策略。

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

urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    #new added by yating
    url(r'^case/', include('case.urls')),
]

小提示,在case app中,创建一个新的urls.py文件如果文件名写成url.py,看看第十步启动出什么错误啊。

十 启动Django自带的websever

启动Django自带的webserver命令如下,由下图所以我的windows平台一开始用8080端口出错,可能是8080被占用了(有可能是我安装的Fiddler占用了8080)。所以换一个端口就启动成功了。

python manage.py runserver 0.0.0.0:8088
基于Django的动态交互网站的后台开发_第6张图片
Django webserver启动.png

十一 验证HTTP GET接口

打开浏览器,输入以下命令

http://127.0.0.1:8088/case/get_case?name=live1

返回结果应该如下:

[{"name": "live1", "result": "PASS"}]

你可能感兴趣的:(基于Django的动态交互网站的后台开发)