Django快速體驗
前語:html
這一節內容是直接快速上手,後面的內容是對內容進行按步解釋,若是不想看解析的,能夠直接只看這一節的內容。
1.新建項目應用
新建項目test1
新建應用booktestpython
2.註冊應用
去test1下面的settings.py文件下注冊應用linux


INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'booktest', )
3.編寫數據庫相關代碼
編寫模型類代碼web
models.py正則表達式


from django.db import models # 設計和表對應的類-模型類 # Create your models here. # 一類 # 圖書類 class BookInfo(models.Model): """圖書模型類""" # 圖書名稱,Charfield說明是一個字符串,max_length制定字符串的最大長度 btitle = models.CharField(max_length=20) # 出版日期,Datefield說明是一個日期類型 bpub_date = models.DateField() def __str__(self): # 返回書名 return self.btitle # 多類 # 英雄類 # 關係屬性,hbook,創建圖書類和英雄人物類之間的一對多關係 class HeroInfo(models.Model): """英雄人物模型類""" hname = models.CharField(max_length=20) # 英雄名稱 # 性別,指定爲bool類型,False表明性別爲男 hgender = models.BooleanField(default=False) # 備註/大招技能 hcomment = models.CharField(max_length=120) hbook = models.ForeignKey("BookInfo") def __str__(self): # 返回英雄名 return self.hname
4.數據遷移
進行數據遷移,命令行下:
生成遷移文件sql
python manage.py makemigrations
執行遷移生成表shell
python mange.py migrate
5.本地化
去settings.py下修改語言和時區數據庫
# LANGUAGE_CODE = 'en-us' LANGUAGE_CODE = 'zh-hans' # TIME_ZONE = 'UTC' TIME_ZONE = 'Asia/Shanghai'
6.註冊超級用戶
命令行下:django
python manage.py createsuperuser
7.在應用下的admin.py中註冊模型類。
在應用下的admin.py文件對後臺管理進行配置
admin.pyubuntu


from django.contrib import admin from booktest.models import BookInfo,HeroInfo # 後臺管理相關文件 # Register your models here. # 自定義模型管理類,控制在admin後臺顯示的字段信息 class BookInfoAdmin(admin.ModelAdmin): """圖書模型管理類""" list_display = ['id', 'btitle', 'bpub_date'] class HeroInfoAdmin(admin.ModelAdmin): """英雄模型管理類""" list_display = ['id', 'hname', 'hcomment'] # 註冊模型類 admin.site.register(BookInfo, BookInfoAdmin) admin.site.register(HeroInfo, HeroInfoAdmin)
8.運行程序
linux在命令行下,進入虛擬環境,進入項目所在目錄;python manage.py runserver
pycharm下點擊右上角的朝右綠色箭頭,注意選中test1;或者點擊菜單欄的run,run "test1";再或者若是你的pycharm版本較高的話,
能夠點擊左下角的一個terminal,會進入命令行模式,
python manage.py runserver
9.後臺管理
在瀏覽器上輸入:http://127.0.0.1:8000/admin
輸入超級用戶帳號和密碼
便可進行數據庫操做,增刪改查
10.視圖代碼編寫
views.py


from django.shortcuts import render from django.http import HttpResponse from django.template import loader, RequestContext # Create your views here. def my_render(request, template_path, context_dict={}): """使用模板文件""" # 使用模板文件 # 1.加載模板文件 temp= loader.get_template(template_path) # 2.定義模板上下文:給模板傳數據 context = RequestContext(request, context_dict) # 3.模板渲染:產生標準的html內容 res_html = temp.render(context) # 4.返回給瀏覽器 return HttpResponse(res_html) # 1.定義視圖函數,HttpRequest # 2.進行url配置,目的是創建url地址和視圖的對應關係 # http://127.0.0.1:8000/index def index(request): # 進行處理,和M與T進行交互 # return HttpResponse("okay") # # 使用模板文件 # # 1.加載模板文件 # temp= loader.get_template('booktest/index.html') # # 2.定義模板上下文:給模板傳數據 # context = RequestContext(request, {}) # # 3.模板渲染:產生標準的html內容 # res_html = temp.render(context) # # 4.返回給瀏覽器 # return HttpResponse(res_html) # my_render(request, "booktest/index.html") return render(request, "booktest/index.html", {'content': 'hello world', 'list': list(range(1, 10))}) def index2(request): # 進行處理,和M與T進行交互 return HttpResponse("hello index2")
11.靜態文件夾和靜態文件
新建templates文件夾
templates下新建booktest文件夾
booktest下新建index.html


<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>index</title> </head> <body> <h2>index頁面</h2> 使用模板文件:<br/> <h3>{{ content }}</h3> <br/> 使用列表:<br/> <p>{{ list }}</p> <br/> for循環:<br/> <ul> {% for i in list %} <li>{{ i }}</li> {% endfor %} </ul> </body> </html>
12.設置templates模板文件目錄
去settings.py下設置模板文件目錄


TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, "templates")], # 設置模板文件目錄 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ]
13.應用路由分發
在應用下新建urls.py文件,寫入


booktest/urls.py from django.conf.urls import url from booktest import views # 在應用的urls文件中進行url匹配的時候,應嚴控控制匹配的開頭和結尾 urlpatterns = [ # 經過url函數設置路由配置項 url('^index$', views.index), # 創建index路由和視圖index之間的關係 url('^index2$', views.index2), # 創建index路由和視圖index之間的關係 ]
14.項目路由分發
test1/urls.py


from django.conf.urls import include, url from django.contrib import admin from booktest import urls # 項目的urls文件 urlpatterns = [ url(r'^admin/', include(admin.site.urls)), # 配置項目 url(r'^', include('booktest.urls')), # 配置項目,包含booktest應用中的urls文件 ]
15.快速體驗web
在瀏覽器上輸入:http://127.0.0.1:8000/index
便可看到一個有數據的界面
ORM簡介
ORM
- django中內嵌了ORM框架,ORM框架能夠將類和數據表進行對應起來,只須要經過類和對象就能夠對數據表進行操做。
- 設計類:模型類。
- ORM另一個做用:根據設計的類生成數據庫中的表。
- 在model.py中設計和表對應的類-模型類;
模型
模型類設計
模型類設計和表生成
- 在應用models.py中設計模型類。
- 必須繼承於models.Model類。
1)設計BookInfo類。
2)設計HeroInfo類。
Models.ForeignKey能夠創建兩個模型類之間一對多的關係,django在生成表的時候,就會在多的表中建立一列做爲外鍵,創建兩個表之間一對多的關係。
from django.db import models # 設計和表對應的類,模型類 # Create your models here. # 一類 # 圖書類 class BookInfo(models.Model): '''圖書模型類''' # 圖書名稱,CharField說明是一個字符串,max_length指定字符串的最大長度 btitle = models.CharField(max_length=20) # 出版日期,DateField說明是一個日期類型 bpub_date = models.DateField() def __str__(self): # 返回書名 return self.btitle # 多類 # 英雄人物類 # 英雄名 hname # 性別 hgender # 年齡 hage # 備註 hcomment # 關係屬性 hbook,創建圖書類和英雄人物類之間的一對多關係 class HeroInfo(models.Model): '''英雄人物模型類''' hname = models.CharField(max_length=20) # 英雄名稱 # 性別,BooleanField說明是bool類型,default指定默認值,False表明男 hgender = models.BooleanField(default=False) # 備註 hcomment = models.CharField(max_length=128) # 關係屬性 hbook,創建圖書類和英雄人物類之間的一對多關係 # 關係屬性對應的表的字段名格式: 關係屬性名_id hbook = models.ForeignKey('BookInfo') def __str__(self): # 返回英雄名 return self.hname
模型類生成表
1)生成遷移文件
命令:
python manage.py makemigrations
遷移文件是根據模型類生成的。
2)執行遷移生成表
命令:
python mange.py migrate
根據遷移文件生成表。
生成表名的默認格式:應用名_模型類名小寫
模型類表生成示例
// 在model.py文件編寫好模型類代碼,進入虛擬環境 (cp15) python@ubuntu:~/day01/test1$ python manage.py makemigrations //生成遷移文件 (cp15) python@ubuntu:~/day01/test1$ python mange.py migrate //執行遷移文件表 (cp15) python@ubuntu:~/day01/test1$ sudo apt-get install sqliteman //安裝可視數據庫軟件sqliteman (cp15) python@ubuntu:~/day01/test1$ sqliteman //打開可視數據庫軟件
django默認使用的數據庫是sqlite,單這只是小型數據庫,不知足web開發需求,僅適用於手機端的軟件,因此咱們通常不用這個,這裏瞭解認識一下;
經過模型類操做數據表
進入項目shell的命令:
python manage.py shell
如下爲在相互shell終端中演示的例子:
首先導入模型類:
from booktest.models import BookInfo,HeroInfo
1)向booktest_bookinfo表中插入一條數據。
b = BookInfo() # 定義一個BookInfo類的對象 b.btitle ='天龍八部' # 定義b對象的屬性並賦值 b.bpub_date = date(1990,10,11) b.save() # 纔會將數據保存進數據庫
2)查詢出booktest_bookinfo表中id爲1的數據。
b = BookInfo.objects.get(id=1)
3)在上一步的基礎上改變b對應圖書的出版日期。
b.bpub_date = date(1989,10,21) b.save() #纔會更新表格中的數據
4)緊接上一步,刪除b對應的圖書的數據。
b.delete() #纔會刪除
5)向booktest_heroInfo表中插入一條數據。
h = HeroInfo() h.hname = '郭靖' h.hgender = False h.hcomment = ‘降龍十八掌’ b2 = BookInfo.objects.get(id=2) h.hbook = b2 #給關係屬性賦值,英雄對象所屬的圖書對象 h.save()
6)查詢圖書表裏面的全部內容。
BookInfo.objects.all() HeroInfo.objects.all()
關係操做
1)查詢出id爲2的圖書中全部英雄人物的信息。
b = BookInfo.objects.get(id=2) b.heroinfo_set.all() #查詢出b圖書中全部英雄人物的信息
模型-模型類關係和關係查詢示例


(cp15) python@ubuntu:~/day01/test1$ python manage.py shell python@ubuntu:~$ workon cp15 (cp15) python@ubuntu:~$ ls day01 Desktop Downloads examples.desktop Pictures Templates workspace dbs Documents dump.rdb Music Public Videos (cp15) python@ubuntu:~$ cd day01 (cp15) python@ubuntu:~/day01$ ls test1 (cp15) python@ubuntu:~/day01$ cd test1 (cp15) python@ubuntu:~/day01/test1$ python manage.py shell Python 3.5.2 (default, Nov 12 2018, 13:43:14) [GCC 5.4.0 20160609] on linux Type "help", "copyright", "credits" or "license" for more information. (InteractiveConsole) >>> from booktest.models import BookInfo,HeroInfo >>> b = BookInfo() >>> b.title = '天龍八部' >>> from datetime import date >>> b.bpub_date = date(1990,1,1) >>> b.save() >>> b.btitle = '天龍八部' >>> b.save() >>> h = HeroInfo() >>> h.hname = '段譽' >>> h.hgender = False >>> h.hcomment = '六脈神劍' >>> h.hbook = b >>> h.save() >>> h2 = HeroInfo() >>> h2.hname = '喬峯' >>> h2.hgender = False >>> h2.hcomment = '降龍十八掌' >>> h2.hbook = b >>> h2.save() >>> h3 = HeroInfo.objects.get(id=2) >>> h3.hname '喬峯' >>> h3.hbook_id 1 >>> h3.hbook <BookInfo: BookInfo object> >>> h3.hbook.btitle '天龍八部' # 查詢書籍表中全部包含的英雄列表 >>> b.heroinfo_set.all() [<HeroInfo: HeroInfo object>, <HeroInfo: HeroInfo object>] # 查詢書籍表裏面有多少數據 >>> BookInfo.objects.all() [<BookInfo: BookInfo object>] >>> quit()
一對多的時候,若是你要往多類裏面的表加一條數據,由於一類和多類有對應關係,那麼給多類對象增長屬性的時候,它的外鍵賦值必須爲一個跟一類關聯的對象;
b = BookInfo() h2 = HeroInfo() h2.hbook = b
Django後臺管理
後臺管理
1)本地化
語言和時區的本地化。
修改settings.py文件,修改後臺django語言和時區,zh-hans,Asia/Shanghai
# LANGUAGE_CODE = 'en-us' LANGUAGE_CODE = 'zh-hans' # TIME_ZONE = 'UTC' TIME_ZONE = 'Asia/Shanghai'
2)建立管理員
命令:
python manage.py createsuperuser
建立超級用戶及運行演示示例
(cp15) python@ubuntu:~/day01/test1$ python manage.py createsuperuser Username (leave blank to use 'python'): admin Email address: Password: Password (again): Superuser created successfully. (cp15) python@ubuntu:~/day01/test1$ python manage.py runserver Performing system checks... // 瀏覽器打開 http://127.0.0.1:8000/admin/ // 帳號admin 密碼root
3)註冊模型類
在應用下的admin.py中註冊模型類。
告訴djang框架根據註冊的模型類來生成對應表管理頁面。
// admin.py
from django.contrib import admin from booktest.models import BookInfo,HeroInfo # 後臺管理相關文件 # Register your models here. # 註冊模型類 admin.site.register(BookInfo) admin.site.register(HeroInfo)
// models.py


from django.db import models # 設計和表對應的類-模型類 # Create your models here. # 一類 # 圖書類 class BookInfo(models.Model): """圖書模型類""" # 圖書名稱,Charfield說明是一個字符串,max_length制定字符串的最大長度 btitle = models.CharField(max_length=20) # 出版日期,Datefield說明是一個日期類型 bpub_date = models.DateField() def __str__(self): # 返回書名 return self.btitle # 多類 # 英雄類 # 關係屬性,hbook,創建圖書類和英雄人物類之間的一對多關係 class HeroInfo(models.Model): """英雄人物模型類""" hname = models.CharField(max_length=20) # 英雄名稱 # 性別,指定爲bool類型,False表明性別爲男 hgender = models.BooleanField(default=False) # 備註/大招技能 hcomment = models.CharField(max_length=120) hbook = models.ForeignKey("BookInfo") def __str__(self): # 返回英雄名 return self.hname
若是沒有使用__str__方法的話,就會在admin頁面上顯示xxx.object,由於:
b = BookInfo.objects.get(btitle='天龍八部') c = str(b)
而頁面上的xxx.object就是str(b),若是咱們要讓admin頁面上顯示其餘,就重寫__str__方法。
能夠使用admin後臺管理添加修改刪除數據,由於是可視化界面,請自行嘗試;
4)自定義管理頁面(部分)
自定義模型管理類。模型管理類就是告訴django在生成的管理頁面上顯示哪些內容。


from django.contrib import admin from booktest.models import BookInfo,HeroInfo # 後臺管理相關文件 # Register your models here. # 自定義模型管理類,控制在admin後臺顯示的字段信息 class BookInfoAdmin(admin.ModelAdmin): """圖書模型管理類""" list_display = ['id', 'btitle', 'bpub_date'] class HeroInfoAdmin(admin.ModelAdmin): """英雄模型管理類""" list_display = ['id', 'hname', 'hcomment'] # 註冊模型類 admin.site.register(BookInfo, BookInfoAdmin) admin.site.register(HeroInfo, HeroInfoAdmin)
視圖
在Django中,經過瀏覽器去請求一個頁面時,使用視圖函數來處理這個請求的,視圖函數處理以後,要給瀏覽器返回頁面內容。
視圖函數的使用
1)定義視圖函數
視圖函數定義在views.py中。
例:
def index(request): #進行處理。。。 return HttpResponse('hello python')
視圖函數必須有一個參數request,進行處理以後,須要返回一個HttpResponse的類對象,hello python就是返回給瀏覽器顯示的內容。
views.py


from django.shortcuts import render from django.http import HttpResponse # Create your views here. # 1.定義視圖函數,HttpRequest # 2.進行url配置,目的是創建url地址和視圖的對應關係 # http://127.0.0.1:8000/index def index(request): # 進行處理,和M與T進行交互 return HttpResponse("okay") def index2(request): # 進行處理,和M與T進行交互 return HttpResponse("hello index2")
2)進行url配置
url配置的目的是讓創建url和視圖函數的對應關係。url配置項定義在urlpatterns的列表中,每個配置項都調用url函數。
url函數有兩個參數,第一個參數是一個正則表達式,第二個是對應的處理動做。
配置url時,有兩種語法格式:
- a) url(正則表達式,視圖函數名)
- b) url(正則表達式,include(應用中的urls文件))
工做中在配置url時,首先在項目的urls.py文件中添加配置項時,並不寫具體的url和視圖函數之間的對應關係,而是包含具體應用的urls.py文件,在應用的urls.py文件中寫url和視圖函數的對應關係。
在應用booktest下新建urls.py,
booktest/urls.py


from django.conf.urls import url from booktest import views # 在應用的urls文件中進行url匹配的時候,應嚴控控制匹配的開頭和結尾 urlpatterns = [ # 經過url函數設置路由配置項 url('^index$', views.index), # 創建index路由和視圖index之間的關係 url('^index2$', views.index2), # 創建index路由和視圖index之間的關係 ]
test1/urls.py


from django.conf.urls import include, url from django.contrib import admin from booktest import urls # 項目的urls文件 urlpatterns = [ url(r'^admin/', include(admin.site.urls)), # 配置項目 url(r'^', include('booktest.urls')), # 配置項目,包含booktest應用中的urls文件 ]
url匹配的過程
在項目的urls.py文件中包含具體應用的urls.py文件,應用的urls.py文件中寫url和視圖函數的對應關係。
當用戶輸入如http://127.0.0.1:8000/aindex時,去除域名和最前面的/,剩下aindex,
拿aindex字符串到項目的urls文件中進行匹配,配置成功以後,去除匹配的a字符,
那剩下的index字符串繼續到項目的urls文件中進行正則匹配,匹配成功以後執行視圖函數index,
index視圖函數返回內容hello python給瀏覽器來顯示。
注意一下http://127.0.0.1:8000/index和http://127.0.0.1:8000/index/,後面的可能會在嚴控匹配開頭結尾時出錯。
模板
模板不單單是一個html文件。
模板文件的使用
1)建立模板文件夾
2)配置模板目錄
3) 使用模板文件
a)加載模板文件
去模板目錄下面獲取html文件的內容,獲得一個模板對象。
b)定義模板上下文
向模板文件傳遞數據。
c)模板渲染
獲得一個標準的html內容。
給模板文件傳遞數據
模板變量使用:{{ 模板變量名 }} 模板代碼段:{%代碼段%} for循環: {% for i in list %} {% endfor %}
在項目目錄下新建templates文件夾,和應用同級;
去settings文件配置模板目錄
TEMPLATES = [ { 'DIRS': [os.path.join(BASE_DIR, "templates")], # 設置模板文件目錄 }, ]
若是有多個應用,爲了避免混淆html文件,會在templates下再對每一個應用新建一個對應名文件;
templates/test1/index.html


<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>index</title> </head> <body> <h2>index頁面</h2> 使用模板文件:<br/> <h3>{{ content }}</h3> <br/> 使用列表:<br/> <p>{{ list }}</p> <br/> for循環:<br/> <ul> {% for i in list %} <li>{{ i }}</li> {% endfor %} </ul> </body> </html>
views.py


from django.shortcuts import render from django.http import HttpResponse from django.template import loader, RequestContext # Create your views here. def my_render(request, template_path, context_dict={}): """使用模板文件""" # 使用模板文件 # 1.加載模板文件 temp= loader.get_template(template_path) # 2.定義模板上下文:給模板傳數據 context = RequestContext(request, context_dict) # 3.模板渲染:產生標準的html內容 res_html = temp.render(context) # 4.返回給瀏覽器 return HttpResponse(res_html) # 1.定義視圖函數,HttpRequest # 2.進行url配置,目的是創建url地址和視圖的對應關係 # http://127.0.0.1:8000/index def index(request): # 進行處理,和M與T進行交互 # return HttpResponse("okay") # # 使用模板文件 # # 1.加載模板文件 # temp= loader.get_template('booktest/index.html') # # 2.定義模板上下文:給模板傳數據 # context = RequestContext(request, {}) # # 3.模板渲染:產生標準的html內容 # res_html = temp.render(context) # # 4.返回給瀏覽器 # return HttpResponse(res_html) # my_render(request, "booktest/index.html") return render(request, "booktest/index.html", {'content': 'hello world', 'list': list(range(1, 10))})
其中,render函數至關於執行了上面的my_render函數,實際開發中只要寫render便可,這裏是爲了理解render的做用而演示;
MVT綜合案例
案例完成
編碼以前的準備工做:
1)設計出訪問頁面的url和對應的視圖函數的名字,肯定視圖函數的功能。
2)設計模板文件的名字。
如下爲案例中的簡單設計過程:
1)完成圖書信息的展現:
a)設計url,經過瀏覽器訪問 http://127.0.0.1:8000/books/ 時顯示圖書信息頁面。
b)設計url對應的視圖函數show_books。
查詢出全部圖書的信息,將這些信息傳遞給模板文件。
c)編寫模板文件show_books.html。
遍歷顯示出每一本圖書的信息。
2)完成點擊某本圖書時,顯示出圖書裏全部英雄信息的頁面。
a)設計url,經過訪問http://127.0.0.1:8000/數字/時顯示對應的英雄信息頁面。
這裏數字指點擊的圖書的id。
b)設計對應的視圖函數detail。
接收圖書的id,根據id查詢出相應的圖書信息,而後查詢出圖書中的全部英雄信息。
c)編寫模板文件detail.html。
指定項目運行ip及端口:python manage.py runserver 127.0.0.1:8888
綜合案例代碼
booktest/admin.py


from django.contrib import admin from booktest.models import BookInfo,HeroInfo # 後臺管理相關文件 # Register your models here. # 自定義模型管理類 class BookInfoAdmin(admin.ModelAdmin): '''圖書模型管理類''' list_display = ['id', 'btitle', 'bpub_date'] class HeroInfoAdmin(admin.ModelAdmin): '''英雄人物模型管理類''' list_display = ['id', 'hname', 'hcomment'] # 註冊模型類 # admin.site.register(BookInfo) admin.site.register(BookInfo, BookInfoAdmin) admin.site.register(HeroInfo, HeroInfoAdmin)
booktest/models.py


from django.db import models # 設計和表對應的類,模型類 # Create your models here. # 一類 # 圖書類 class BookInfo(models.Model): '''圖書模型類''' # 圖書名稱,CharField說明是一個字符串,max_length指定字符串的最大長度 btitle = models.CharField(max_length=20) # 出版日期,DateField說明是一個日期類型 bpub_date = models.DateField() def __str__(self): # 返回書名 return self.btitle # 多類 # 英雄人物類 # 英雄名 hname # 性別 hgender # 年齡 hage # 備註 hcomment # 關係屬性 hbook,創建圖書類和英雄人物類之間的一對多關係 class HeroInfo(models.Model): '''英雄人物模型類''' hname = models.CharField(max_length=20) # 英雄名稱 # 性別,BooleanField說明是bool類型,default指定默認值,False表明男 hgender = models.BooleanField(default=False) # 備註 hcomment = models.CharField(max_length=128) # 關係屬性 hbook,創建圖書類和英雄人物類之間的一對多關係 # 關係屬性對應的表的字段名格式: 關係屬性名_id hbook = models.ForeignKey('BookInfo') def __str__(self): # 返回英雄名 return self.hname
booktest/views.py


from django.shortcuts import render from django.http import HttpResponse from booktest.models import BookInfo # 導入圖書模型類 from django.template import loader,RequestContext def my_render(request, template_path, context_dict={}): '''使用模板文件''' # 使用模板文件 # 1.加載模板文件, 模板對象 temp = loader.get_template(template_path) # 2.定義模板上下文:給模板文件傳遞數據 context = RequestContext(request, context_dict) # 3.模板渲染:產生標準的html內容 res_html = temp.render(context) # 4.返回給瀏覽器 return HttpResponse(res_html) # Create your views here. # 1.定義視圖函數,HttpRequest # 2.進行url配置,創建url地址和視圖的對應關係 # http://127.0.0.1:8000/index def index(request): # 進行處理,和M和T進行交互。。。 # return HttpResponse('老鐵,沒毛病') # return my_render(request, 'booktest/index.html') return render(request, 'booktest/index.html', {'content':'hello world', 'list':list(range(1,10))}) # http://127.0.0.1:8000/index2 def index2(request): return HttpResponse('hello python') def show_books(request): '''顯示圖書的信息''' # 1.經過M查找圖書表中的數據 books = BookInfo.objects.all() # 2.使用模板 return render(request, 'booktest/show_books.html', {'books':books}) def detail(request, bid): '''查詢圖書關聯英雄信息''' # 1.根據bid查詢圖書信息 book = BookInfo.objects.get(id=bid) # 2.查詢和book關聯的英雄信息 heros = book.heroinfo_set.all() # 3.使用模板 return render(request, 'booktest/detail.html', {'book':book, 'heros':heros})
booktest/urls.py


from django.conf.urls import url from booktest import views # index # index2 # index2/ # 在應用的urls文件中進行url配置的時候: # 1.嚴格匹配開頭和結尾 urlpatterns = [ # 經過url函數設置url路由配置項 url(r'^index$', views.index), # 創建/index和視圖index之間的關係 url(r'^index2$', views.index2), url(r'^books$', views.show_books), # 顯示圖書信息 url(r'^books/(\d+)$', views.detail), # 顯示英雄信息 ]
test1/urls.py


from django.conf.urls import include, url from django.contrib import admin # 項目的urls文件 urlpatterns = [ url(r'^admin/', include(admin.site.urls)), # 配置項目 url(r'^', include('booktest.urls')), # 包含booktest應用中的urls文件 ]
templates/detail.html


<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>顯示圖書關聯的英雄信息</title> </head> <body> <h1>{{ book.btitle }}</h1> 英雄信息以下:<br/> <ul> {% for hero in heros %} <li>{{ hero.hname }}--{{ hero.hcomment }}</li> {% empty %} <li>沒有英雄信息</li> {% endfor %} </ul> </body> </html>
templates/index.html


<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>模板文件</title> </head> <body> <h1>這是一個模板文件</h1> 使用模板變量:<br/> {{ content }}<br/> 使用列表:<br/> {{ list }}<br/> for循環:<br/> <ul> {% for i in list %} <li>{{ i }}</li> {% endfor %} </ul> </body> </html>
templates/show_books.html


<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>顯示圖書信息</title> </head> <body> 圖書信息以下: <ul> {% for book in books %} <li><a href="/books/{{ book.id }}">{{ book.btitle }}</a></li> {% endfor %} </ul> </body> </html>
原文出處:https://www.cnblogs.com/yifchan/p/python-1-24.html