說明:Django框架入門
當前項目環境:python3.5、django-1.11
項目名:test1
應用名:booktest
命令可簡寫爲:python manager.py xxx => ./manager.py xxx
準備:已經安裝python並加入環境變量
已安裝 django
設計框架對比(引用,可自行搜索):
1、MVC
MVC框架的核心思想是:解耦
降低各功能模塊之間的耦合性,方便變更,更容易重構代碼,最大程度上實現代碼的重用
m表示model,主要用於對數據庫的封裝
v表示view,用於向用戶展示結果
c表示controller,是核心,用戶處理請求,獲取數據,返回結果
2、MVT
Django屬於MVT框架
m表示model,負責與數據庫交互
v表示view,是核心,負責接收請求、獲取數據、返回結果
t便是template,負責呈現內容到瀏覽器
個人覺得兩種框架基本大同小異
一、開始
1、創建項目:test1
> django-admin startproject test1
2、進入test1目錄創建應用:booktest
> python manager.py startapp booktest
創建完成,可以看到項目下booktes目錄
3、啓動服務器,測試
> python manager.py runserver [8080]
端口號可以指定,默認8000
打開瀏覽器訪問 : 127.0.0.1:8080
二、創建模型:
打開booktest目錄下的 models.py文件,編輯如下
1 from django.db import models 2 """ 3 models文件的作用: 4 1、根據models的定義去生成SQL語句,並創建表 5 2、創建對象,對對象進行各種操作 6 圖書-英雄的關係爲一對多 7 """ 8 9 10 # 圖書表 11 class BookInfo(models.Model): 12 # 默認自動生成id 13 # 圖書名稱 14 btitle = models.CharField(max_length=20) 15 # 圖書發佈時間 16 bpub_data = models.DateTimeField() 17 18 def __str__(self): 19 return self.btitle 20 21 22 23 # 英雄表 24 class HeroInfo(models.Model): 25 # 英雄姓名 26 hname = models.CharField(max_length=10) 27 # 英雄性別 28 hgender = models.BooleanField() 29 # 英雄簡介 30 hcontent = models.CharField(max_length=500) 31 # 所屬圖書 : 外鍵引用對象 32 hbook = models.ForeignKey(BookInfo)
三、生成數據表
1、激活模型:編輯settings.py文件,將booktest應用加入到INSTALLED_APPS下,編輯之後如下:
1 INSTALLED_APPS = [ 2 'django.contrib.admin', 3 'django.contrib.auth', 4 'django.contrib.contenttypes', 5 'django.contrib.sessions', 6 'django.contrib.messages', 7 'django.contrib.staticfiles', 8 'booktest', # 我們添加的應用 9 ]
數據庫使用默認的sqlite
2、生成遷移文件:根據模型類型生成sql語句
> python manager.py makemigrations
結果如下所示:
3、執行遷移:執行sql語句生成數據表
> python manager.py migrate
四、測試數據庫操作:進入django的shell進行測試
> python manager.py shell
1、添加記錄,並查看
五、定義視圖
這裏爲了方便處理,在booktest應用下新建了一個urls.py文件,方便管理
1、Route配置
① 查看setting.py文件如下:
ROOT_URLCONF = 'test1.urls'
② 修改test1/urls.py文件如下:
1 from django.conf.urls import url, include 2 from django.contrib import admin 3 4 5 urlpatterns = [ 6 url(r'^admin/', admin.site.urls), 7 # 使用應用的urls 8 url(r'^', include('booktest.urls')) 9 ]
③ 在booktest目錄下新建urls.py文件,編輯如下:
1 from django.conf.urls import url 2 from . import views 3 4 urlpatterns = [ 5 # 首頁的處理方法 6 url(r'^$', views.index) 7 ]
2、修改視圖文件 booktest/views.py
1 from django.http import * 2 3 4 def index(request): 5 # 打印 字符串 6 return HttpResponse("Hello Django")
3、測試視圖,結果如下
六、定義模板(這裏僅僅對模板進行展示,更多模板操作,可查閱官方文檔)
1、創建templates目錄,並添加文件 index.html,編輯 index.html文件:
2、 修改settings.py文件,編輯如下:
'DIRS': [os.path.join(BASE_DIR, 'templates')], # 修改目錄
3、修改視圖文件 views.py
1 from django.shortcuts import render 2 from django.http import * 3 from django.template import RequestContext, loader 4 5 6 def index(request): 7 # # 加載模板 render() 渲染模板 8 # tmp = loader.get_template('booktest/index.html') 9 # return HttpResponse(tmp.render()) 10 return render(request, 'booktest/index.html')
4、測試,刷新頁面
附錄一:使用Django提供管理站點,對數據庫進行管理
1、創建管理用戶
> python manager.py createsuperuser
按照要求輸入賬號、郵箱、密碼
2、打開網頁,登錄
瀏覽器訪問地址(根據自己的情況):127.0.0.1:8000/admin
進入管理站點,默認可以對groups、users進行管理,如下:
3、管理界面本地化(顯示爲中文、修改時區)
修改配置文件settings.py 如下:
1 # LANGUAGE_CODE = 'en-us' 2 LANGUAGE_CODE = 'zh-hans' 3 4 # TIME_ZONE = 'UTC' 5 TIME_ZONE = 'Asia/Shanghai'
語言代碼與版本有關:1.8之後使用“zh-hans”,之前是“zh-cn”
4、自定義管理界面
Django提供了admin.ModelAdmin類,來定義模型在Admin界面顯示的方式
需要在django提供的管理站點進行管理model,則需要修改應用下的admin.py文件如下:
1 from django.contrib import admin 2 from .models import * 3 4 5 # 如果需要通過/admin進行管理,需要進行註冊 6 admin.site.register(BookInfo) 7 admin.site.register(HeroInfo)
如果對頁面有更多的要求、顯示更多內容,則如下更改admin.py:
1 from django.contrib import admin 2 from .models import * 3 4 5 class HeroInfoInline(admin.TabularInline): 6 """ 7 關聯對象註冊 8 可以繼承的父類: 9 1-層疊顯示:admin.TabularInline 10 2-表格顯示:admin.StackedInline 11 """ 12 model = HeroInfo 13 extra = 3 14 15 16 class BookInoAdmin(admin.ModelAdmin): 17 # 1、列表頁屬性 18 # 顯示字段:可以點擊列頭進行排序 19 list_display = ['id', 'btitle', 'bpub_data'] 20 # 過濾字段:過濾框會出現在右側 21 list_filter = ['btitle'] 22 # 搜索字段:搜索框會出現在上側 23 search_fields = ['btitle'] 24 # 分頁:分頁框會出現在下側 25 list_per_page = 10 26 27 # 2、修改、添加頁屬性 28 # 屬性分組 29 fieldsets = [ 30 ('base', {'fields': ['btitle']}), 31 ('super', {'fields': ['bpub_data']}) 32 ] 33 # 關聯的對象 34 inlines = [HeroInfoInline] 35 36 37 class HeroInfoAdmin(admin.ModelAdmin): 38 # 顯示字段:可以點擊列頭進行排序 39 list_display = ['id', 'hname', 'gender', 'hcontent'] 40 41 42 # 如果需要通過/admin進行管理,需要進行註冊 43 admin.site.register(BookInfo, BookInoAdmin) 44 admin.site.register(HeroInfo, HeroInfoAdmin)
下圖爲列表頁面:對應上圖的BookInfoAdmin中以爲 list_xxx 開頭的字段
下圖爲修改、新增頁面:對屬性進行分組,對應上面代碼的BookInfoAdmin的 fieldsets字段
5、管理對象的註冊
修改admin.py文件如下:
6、布爾值顯示
修改models.py文件如下
修改models.py文件