[Python] Django框架入門

說明: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文件

    

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章