本文的實踐都是在Windows平臺下古毛,請參考以下文章來安裝Django。以下練習是基于我做的一個Report Server的簡化版亲澡,我把最核心的操作都提煉出來疼阔,希望對大家有用盲憎。
練習題目:case是數(shù)據庫中的一張表嗅骄,有兩列,分別為case name饼疙,case result溺森。建立一個網站,可以在網頁中顯示出數(shù)據庫中case的信息窑眯,還可以通過case name
http://www.reibang.com/p/c6dfc12fa72e
練習小提示:
- 所有帶有python manage.py XXX 的命令都得在新建工程的第一級目錄下執(zhí)行屏积,也就是你運行這個命令必須該目錄下有manage.py。下面的練習中如果運行這些命令有問題磅甩,請查看路徑炊林。
一 新建一個 django project
在Windows cmd中運行下面的命令,建立一個名叫mysite的project卷要。
cd C:\
django-admin startproject mysite
可以看mysite的目錄如下渣聚,都是默認生成的文件。這里僧叉,主目錄是mysite奕枝,下一級還有一個mysite。在下面的操作中瓶堕,要注意是在第一級還是第二季的mysite中隘道,這里容易出錯。
二 新建 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',
)
四 數(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ù)據表暮刃。
- python manage.py makemigrations
- python manage.py sqlmigrate case 0001
這一步是查看SQL的語句跨算,運行該命令就可以顯示出來。不懂SQL語句沒關系椭懊,Django會為你生成命令诸蚕。 - 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 shell操作數(shù)據庫表
Django shell提供了豐富的API, 下面演示如何使用它泉哈。
python manage.py shell
Django 會自動進入在settings.py中設置的數(shù)據庫蛉幸,如果是 MySQL 或 postgreSQL,會要求輸入數(shù)據庫用戶密碼。
在這個終端可以執(zhí)行ORM的命令對數(shù)據庫進行操作丛晦∞热遥或者直接運行數(shù)據庫的SQL語句這個不在本文的練習范圍內。
- 在shell終端導入case類
from case.models import case
- 查看數(shù)據庫中case表的數(shù)據烫沙,此時數(shù)據庫中的case表為空匹层。
case.objects.all()
- 在case中添加一條數(shù)據。
c = case(name='live1',result='PASS')
c.save()
- 查看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 定義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
十一 驗證HTTP GET接口
打開瀏覽器,輸入以下命令
http://127.0.0.1:8088/case/get_case?name=live1
返回結果應該如下:
[{"name": "live1", "result": "PASS"}]