基于Django的動態(tài)交互網站的后臺開發(fā)

本文的實踐都是在Windows平臺下古毛,請參考以下文章來安裝Django。以下練習是基于我做的一個Report Server的簡化版亲澡,我把最核心的操作都提煉出來疼阔,希望對大家有用盲憎。
練習題目:case是數(shù)據庫中的一張表嗅骄,有兩列,分別為case name饼疙,case result溺森。建立一個網站,可以在網頁中顯示出數(shù)據庫中case的信息窑眯,還可以通過case name

http://www.reibang.com/p/c6dfc12fa72e
練習小提示:

  1. 所有帶有python manage.py XXX 的命令都得在新建工程的第一級目錄下執(zhí)行屏积,也就是你運行這個命令必須該目錄下有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

四 數(shù)據庫建模

Django 模型是與數(shù)據庫相關的德频,與數(shù)據庫相關的代碼一般寫在 models.py 中苍息,Django 支持 sqlite3, MySQL, PostgreSQL等數(shù)據庫,只需要在settings.py中配置即可壹置,不用更改models.py中的代碼竞思,豐富的API極大的方便了使用。
如下代碼所示钞护,建立了一個class為case盖喷,有兩個成員屬性是name和result。這個類在數(shù)據庫中就對應了一張表难咕。

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數(shù)據庫配置(Optional)

本文的數(shù)據庫使用默認的數(shù)據庫 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 在數(shù)據庫中生成表

這里我們進行3個步驟在默認的SQLite3中生成第四步中定義的數(shù)據表暮刃。

  1. python manage.py makemigrations
  2. python manage.py sqlmigrate case 0001
    這一步是查看SQL的語句跨算,運行該命令就可以顯示出來。不懂SQL語句沒關系椭懊,Django會為你生成命令诸蚕。
  3. python manage.py migrate
    這一步是真正在SQLite3中建立表case。當你在models.py中新增了類時氧猬,運行它就可以自動在數(shù)據庫中創(chuàng)建表了背犯,不用手動創(chuàng)建。
    下面的代碼是我在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在數(shù)據庫中生成表.png

七 Django shell操作數(shù)據庫表

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

python manage.py shell

Django 會自動進入在settings.py中設置的數(shù)據庫蛉幸,如果是 MySQL 或 postgreSQL,會要求輸入數(shù)據庫用戶密碼。

在這個終端可以執(zhí)行ORM的命令對數(shù)據庫進行操作丛晦∞热遥或者直接運行數(shù)據庫的SQL語句這個不在本文的練習范圍內。

  1. 在shell終端導入case類
from case.models import case
  1. 查看數(shù)據庫中case表的數(shù)據烫沙,此時數(shù)據庫中的case表為空匹层。
case.objects.all() 
  1. 在case中添加一條數(shù)據。
c = case(name='live1',result='PASS')
c.save()
  1. 查看case表中的數(shù)據以及數(shù)據結構等锌蓄。
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操作數(shù)據庫.png

八 Django 定義view函數(shù):HTTP GET Request實例

Django中網址是寫在 urls.py 文件中升筏,用正則表達式對應 views.py 中的一個函數(shù)。我們先來定義我們的view函數(shù)瘸爽。
view函數(shù)中的返回都用json這種格式您访。
在view.py中我們會定義兩個函數(shù),一個是HTTP GET函數(shù)剪决,根據已有的case的name去數(shù)據庫中查詢灵汪,并返回相應的結果。
request.GET.get是獲取http url中的query string柑潦,就是客服端要傳給服務器的參數(shù)享言,比如本例中就是我需要查詢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文件夾內览露,創(chuàng)建一個新的urls.py文件,輸入以下代碼。
這里有url的正則表達式匹配譬胎,我們用最簡單的方式差牛,名字全匹配命锄。如果url里面帶有get_case名字的就去找view.py中的get_case函數(shù)。

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中,創(chuàng)建一個新的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"}]
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末拍鲤,一起剝皮案震驚了整個濱河市贴谎,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌季稳,老刑警劉巖擅这,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異景鼠,居然都是意外死亡仲翎,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門铛漓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來溯香,“玉大人,你說我怎么就攤上這事浓恶∶堤常” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵包晰,是天一觀的道長昂秃。 經常有香客問我,道長杜窄,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任算途,我火速辦了婚禮塞耕,結果婚禮上,老公的妹妹穿的比我還像新娘嘴瓤。我一直安慰自己扫外,他們只是感情好莉钙,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著筛谚,像睡著了一般磁玉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上驾讲,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天蚊伞,我揣著相機與錄音,去河邊找鬼吮铭。 笑死时迫,一個胖子當著我的面吹牛,可吹牛的內容都是我干的谓晌。 我是一名探鬼主播掠拳,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼纸肉!你這毒婦竟也來了溺欧?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤柏肪,失蹤者是張志新(化名)和其女友劉穎姐刁,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體预吆,經...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡龙填,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了拐叉。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片岩遗。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖凤瘦,靈堂內的尸體忽然破棺而出宿礁,到底是詐尸還是另有隱情,我是刑警寧澤蔬芥,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布梆靖,位于F島的核電站,受9級特大地震影響笔诵,放射性物質發(fā)生泄漏返吻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一乎婿、第九天 我趴在偏房一處隱蔽的房頂上張望测僵。 院中可真熱鬧,春花似錦、人聲如沸捍靠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽榨婆。三九已至磁携,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間良风,已是汗流浹背谊迄。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留拖吼,地道東北人鳞上。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像吊档,于是被迫代替她去往敵國和親篙议。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內容