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

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

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

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

一 新建一个 django project

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

cd C:\
django-admin startproject mysite
新建一个 django project.png

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

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',
)
将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在数据库中生成表.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 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 webserver启动.png

十一 验证HTTP GET接口

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

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

返回结果应该如下:

[{"name": "live1", "result": "PASS"}]
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容