基于Django的動態交互網站的后臺開發

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

http://www.lxweimin.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閱讀 230,563評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,694評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 178,672評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,965評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,690評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,019評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,013評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,188評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,718評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,438評論 3 360
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,667評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,149評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,845評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,252評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,590評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,384評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,635評論 2 380

推薦閱讀更多精彩內容