django
創(chuàng)建項目:
django-admin startproject 項目名稱
例:
django-admin startproject test1
- manage.py是項目管理文件肴熏,通過它管理項目糠惫。
- 與項目同名的目錄拉盾,此處為test1。
- *init*.py是一個空文件仍侥,作用是這個目錄test1可以被當作包使用要出。
- settings.py是項目的整體配置文件。
- urls.py是項目的URL配置文件农渊。
- wsgi.py是項目與WSGI兼容的Web服務(wù)器入口患蹂,詳細內(nèi)容會在布署中講到。
創(chuàng)建應(yīng)用
使用一個應(yīng)用開發(fā)一個業(yè)務(wù)模塊砸紊,此處創(chuàng)建應(yīng)用名稱為booktest传于,完成圖書-英雄的信息維護。
創(chuàng)建應(yīng)用的命令如下:
python manage.py startapp booktest
- *init.py*是一個空文件醉顽,表示當前目錄booktest可以當作一個python包使用格了。
- tests.py文件用于開發(fā)測試用例,在實際開發(fā)中會有專門的測試人員徽鼎,這個事情不需要我們來做盛末。
- models.py文件跟數(shù)據(jù)庫操作相關(guān)。
- views.py文件跟接收瀏覽器請求否淤,進行處理悄但,返回頁面相關(guān)。
- admin.py文件跟網(wǎng)站的后臺管理相關(guān)石抡。
- migrations里面存放遷移生成的文件檐嚣。
安裝應(yīng)用
應(yīng)用創(chuàng)建成功后,需要安裝才可以使用啰扛,也就是建立應(yīng)用和項目之間的關(guān)聯(lián)嚎京,在test1/settings.py中INSTALLED_APPS下添加應(yīng)用的名稱就可以完成安裝。
開發(fā)服務(wù)器
在開發(fā)階段隐解,為了能夠快速預覽到開發(fā)的效果鞍帝,django提供了一個純python編寫的輕量級web服務(wù)器,僅在開發(fā)階段使用煞茫。
運行服務(wù)器命令如下:
python manage.py runserver ip:端口
例:
python manage.py runserver
可以不寫IP和端口帕涌,默認IP是127.0.0.1摄凡,默認端口為8000。
ORM框架
O是object蚓曼,也就類對象的意思亲澡,R是relation,翻譯成中文是關(guān)系纫版,也就是關(guān)系數(shù)據(jù)庫中數(shù)據(jù)表的意思床绪,M是mapping,是映射的意思其弊。在ORM框架中癞己,它幫我們把類和數(shù)據(jù)表進行了一個映射,可以讓我們通過類和類對象就能操作它所對應(yīng)的表格中的數(shù)據(jù)瑞凑。ORM框架還有一個功能末秃,它可以根據(jù)我們設(shè)計的類自動幫我們生成數(shù)據(jù)庫中的表格概页,省去了我們自己建表的過程籽御。
django中內(nèi)嵌了ORM框架,不需要直接面向數(shù)據(jù)庫編程惰匙,而是定義模型類技掏,通過模型類和對象完成數(shù)據(jù)表的增刪改查操作。
使用django進行數(shù)據(jù)庫開發(fā)的步驟如下:
- 1.在models.py中定義模型類
- 2.遷移
- 3.通過類和對象完成數(shù)據(jù)增刪改查操作
數(shù)據(jù)遷移
生成遷移文件命令如下:
python manage.py makemigrations
執(zhí)行生成遷移文件命令后项鬼,會在應(yīng)用目錄下的migrations目錄中生成遷移文件哑梳。
執(zhí)行遷移命令如下:
python manage.py migrate
配置視圖
使用視圖時需要進行兩步操作:
* 1.定義視圖函數(shù)
* 2.配置URLconf
1.定義視圖
視圖就是一個Python函數(shù),被定義在views.py中绘盟。
視圖的必須有一個參數(shù)鸠真,一般叫request,視圖必須返回HttpResponse對象龄毡,HttpResponse中的參數(shù)內(nèi)容會顯示在瀏覽器的頁面上吠卷。
打開booktest/views.py文件,定義視圖index如下
from django.http import HttpResponse
def index(request):
return HttpResponse("index")
2.配置URLconf
查找視圖的過程
請求者在瀏覽器地址欄中輸入url沦零,請求到網(wǎng)站后祭隔,獲取url信息,然后與編寫好的URLconf逐條匹配路操,如果匹配成功則調(diào)用對應(yīng)的視圖函數(shù)疾渴,如果所有的URLconf都沒有匹配成功,則返回404錯誤屯仗。
一條URLconf包括url規(guī)則搞坝、視圖兩部分:
- url規(guī)則使用正則表達式定義。
- 視圖就是在views.py中定義的視圖函數(shù)魁袜。
需要兩步完成URLconf配置:
- 1.在應(yīng)用中定義URLconf
- 2.包含到項目的URLconf中
在booktest/應(yīng)用下創(chuàng)建urls.py文件瞄沙,定義代碼如下:
from django.conf.urls import url
from booktest import views
urlpatterns = [
url(r'^$', views.index),
]
包含到項目中:打開test1/urls.py文件己沛,為urlpatterns列表增加項如下:
url(r'^', include('booktest.urls')),
test1/urls.py文件完整代碼如下:
from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^', include('booktest.urls')),
]
視圖調(diào)用模板
視圖調(diào)用模板都要執(zhí)行以上三部分,于是Django提供了一個函數(shù)render封裝了以上代碼距境。 方法render包含3個參數(shù):
- 第一個參數(shù)為request對象
- 第二個參數(shù)為模板文件路徑
- 第三個參數(shù)為字典申尼,表示向模板中傳遞的上下文數(shù)據(jù)
打開booktst/views.py文件,調(diào)用render的代碼如下:
from django.shortcuts import render
def index(request):
context={'title':'圖書列表','list':range(10)}
return render(request,'booktest/index.html',context)
url參數(shù)
情況一:位置參數(shù)
1)在booktest/urls.py中垫桂,修改fan2如下:
url(r'^fan(\d+)_(\d+)/$', views.fan3,name='fan2'),
2)在booktest/views中师幕,定義視圖fan3如下:
def fan3(request, a, b):
return HttpResponse(a+b)
情況二:關(guān)鍵字參數(shù)
1)在booktest/urls.py中,修改fan2如下:
url(r'^fan(?P<id>\d+)_(?P<age>\d+)/$', views.fan4,name='fan2'),
2)在booktest/views中诬滩,定義視圖fan4如下:
def fan4(request, id, age):
return HttpResponse(id+age)
反向解析
要實現(xiàn)反向解析功能霹粥,需要如下步驟:
1)在test4/urls.py中為include定義namespace屬性疼鸟。
url(r'^',include('booktest.urls',namespace='booktest')),
2)在booktest/urls.py中為url定義name屬性后控,并修改為fan2。
url(r'^fan2/$', views.fan2,name='fan2'),
3)在模板中使用url標簽做超鏈接空镜,此處為templates/booktest/fan1.html文件浩淘。
<html>
<head>
<title>反向解析</title>
</head>
<body>
普通鏈接:<a href="/fan2/">fan2</a>
<hr>
反向解析:<a href="{%url 'booktest:fan2'%}">fan2</a>
</body>
</html>
反向解析也可以應(yīng)用在視圖的重定向中。
from django.shortcuts import redirect
from django.core.urlresolvers import reverse
return redirect(reverse('booktest:fan2'))