您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(xì)講解有關(guān)python中如何使用Django框架,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。
第一次使用 Django ,那么你必須要照顧一些初始設(shè)置。也就是說(shuō),您需要自動(dòng)生成一些建立 Django
項(xiàng)目的代碼。
從命令行 cd 到您要存儲(chǔ)代碼的目錄,然后運(yùn)行以下命令:
django-admin startproject BookManage
進(jìn)入項(xiàng)目目錄,目錄結(jié)構(gòu)如下圖:
目錄說(shuō)明:
manage.py :一個(gè)命令行工具,可以使你用多種方式對(duì) Django 項(xiàng)目進(jìn)行交互
內(nèi)層的目錄:項(xiàng)目的真正的Python包
__init__.py :一個(gè)空文件,它告訴Python這個(gè)目錄應(yīng)該被看做一個(gè)Python包
settings.py :項(xiàng)目的配置
urls.py :項(xiàng)目的URL聲明
wsgi.py :項(xiàng)目與 WSGI 兼容的Web服務(wù)器入口
(1) 創(chuàng)建第一個(gè)應(yīng)用程序
Django 自帶一個(gè)實(shí)用程序,可以自動(dòng)生成應(yīng)用程序的基本目錄結(jié)構(gòu),因此您可以專注于編寫代碼而不
是創(chuàng)建目錄。
在一個(gè)項(xiàng)目中可以創(chuàng)建一到多個(gè)應(yīng)用,每個(gè)應(yīng)用進(jìn)行一種業(yè)務(wù)處理
創(chuàng)建應(yīng)用的命令:
python3 manage.py startapp bookApp
應(yīng)用的目錄結(jié)構(gòu)如下圖 :
(2) 編寫第一個(gè)視圖函數(shù)
打開文件 bookApp/views.py 并放入以下Python代碼:
from django.shortcuts import render # Create your views here. from django.http import HttpResponse def index(request): return HttpResponse("圖書管理系統(tǒng)")
(3) 路由規(guī)則
在 bookApp 目錄中創(chuàng)建一個(gè) URLconf ,創(chuàng)建一個(gè)名為 urls.py 。
# bookApp/urls.py from django.conf.urls import url from . import views urlpatterns = [ # 當(dāng)用戶訪問bookApp應(yīng)用的主頁(yè)時(shí), 執(zhí)行視圖函數(shù)index,反向根據(jù)名稱獲取url地址; url(r'^$', views.index, name='index'), ]
根據(jù)配置文件 BookManage/settings 可知路由查找的主文件是 BookManage/urls.py , 因此在該文件
添加一條 url 規(guī)則:
# BookManage/urls.py from django.conf.urls import url from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), # 當(dāng)用戶訪問的url地址以book開頭, 請(qǐng)?jiān)L問bookApp.urls這個(gè)url配置文件進(jìn)行匹配并執(zhí)行對(duì)應(yīng) 的視圖函數(shù). url(r'^book/', include('bookApp.urls')), ]
include()函數(shù)允許引用其他 URLconfs 。
(4) 效果展示
啟動(dòng)服務(wù)器
python3 manage.py runserver
訪問 url 地址: http:// 127.0.0.1:8000/book/ 如果看到主頁(yè)內(nèi)容 圖書管理系統(tǒng) 即成功
(1). 數(shù)據(jù)庫(kù)創(chuàng)建
MariaDB [(none)]> create database BookManage charset=utf8;
(2). 連接 MySQL 數(shù)據(jù)庫(kù)配置
在 settings.py 文件中,通過DATABASES項(xiàng)進(jìn)行數(shù)據(jù)庫(kù)設(shè)置
Django 支持的數(shù)據(jù)庫(kù)包括: sqlite 、 mysql 等主流數(shù)據(jù)庫(kù)
Django 默認(rèn)使用 **SQLite** 數(shù)據(jù)庫(kù)
Django數(shù)據(jù)庫(kù)設(shè)置參考文檔
其中ENGINE設(shè)置為數(shù)據(jù)庫(kù)后端使用。內(nèi)置數(shù)據(jù)庫(kù)后端有:
'django.db.backends.postgresql'
'django.db.backends.mysql'
'django.db.backends.sqlite3'
'django.db.backends.oracle'
在 BookManage/settings.py 文件中,通過DATABASES項(xiàng)進(jìn)行數(shù)據(jù)庫(kù)設(shè)置:
# ....... # 注釋之前的sqlite數(shù)據(jù)庫(kù); # DATABASES = { # 'default': { # 'ENGINE': 'django.db.backends.sqlite3', # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), # } # } # 添加新的Mysql數(shù)據(jù)庫(kù)連接; DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'BookManage', 'USER': 'root', 'PASSWORD': 'westos', 'HOST': 'localhost', 'PORT': '3306', } } # ....... 注意: Django 使用 MySQL 數(shù)據(jù)庫(kù)需要安裝 PyMySQL ,若已經(jīng)安裝請(qǐng)略過。 pip install pymysql
打開 BookManage/__init__.py ,寫入以下代碼導(dǎo)入 pymysql :
import pymysql # MySQLdb只支持Python2.*,還不支持3.可以用PyMySQL代替。 pymysql.install_as_MySQLdb()
(2). 創(chuàng)建數(shù)據(jù)庫(kù)模型
本示例完成“圖書-英雄”信息的維護(hù),需要存儲(chǔ)兩種數(shù)據(jù):圖書、英雄
圖書表結(jié)構(gòu)設(shè)計(jì): 表名: Book
圖書名稱: title
圖書發(fā)布時(shí)間: pub_date
英雄表結(jié)構(gòu)設(shè)計(jì): 表名: Hero
英雄姓名: name
英雄性別: gender
英雄簡(jiǎn)介: hcontent
所屬圖書: hbook
圖書-英雄的關(guān)系為一對(duì)多
# bookApp/models.py from django.db import models # Create your models here.class Book(models.Model): # 定義屬性:默認(rèn)主鍵自增id字段可不寫 title = models.CharField(max_length=20) pub_date = models.DateTimeField() # 定義默認(rèn)輸出格式 def __str__(self): return "%d" % self.title # 自定義對(duì)應(yīng)的表名,默認(rèn)表名:bookApp_book class Meta: db_table = "books" class Hero(models.Model): name = models.CharField(max_length=20) gender = models.BooleanField() content = models.CharField(max_length=100) Book = models.ForeignKey('Book', on_delete=False) def __str__(self): return "%s" % self.name # 自定義對(duì)應(yīng)的表名,默認(rèn)表名:bookApp_hero class Meta: db_table = "heros"
(3). 生成數(shù)據(jù)庫(kù)表
激活模型:編輯 settings.py 文件,將應(yīng)用加入到 INSTALLED_APPS 中
# BookManage/settings.py # Application definition INSTALLED_APPS = [ # .......此處省略 'django.contrib.staticfiles', # 新添加的app 'bookApp', ]
生成遷移文件:根據(jù)模型類生成 sql 語(yǔ)句
python manage.py makemigrations
產(chǎn)生的遷移文件如下:
執(zhí)行遷移:執(zhí)行 sql 語(yǔ)句生成數(shù)據(jù)表
python manage.py migrate
數(shù)據(jù)庫(kù)中查看數(shù)據(jù)庫(kù)表是否創(chuàng)建成功?
$ mysql -uroot -pwestos MariaDB [(none)]> use BookManage MariaDB [BookManage]> show tables; MariaDB [BookManage]> desc books; +----------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+----------------+ | id | int(11) | title | varchar(20) | NO | pub_date | datetime | NO | NO | PRI | NULL | auto_increment | | | NULL | | | | NULL | | +----------+-------------+------+-----+---------+----------------+ MariaDB [BookManage]> desc heros; +---------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------+--------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | varchar(20) | NO | | NULL | | | gender | tinyint(1) | NO | | NULL | | | content | varchar(100) | NO | | NULL | | | Book_id | int(11) | MUL | NULL | | | NO +---------+--------------+------+-----+---------+----------------+ 5 rows in set (0.00 sec)
(4). 數(shù)據(jù)庫(kù)模型基本操作
現(xiàn)在進(jìn)入交互式的Python shell,并使用 Django 提供的免費(fèi) API
python manage.py shell
引入需要的包:
from bookApp.models import Hero, Book
查詢所有圖書信息:
Book.objects.all()
新建圖書信息:
from datetime import datetime book = Book(title="射雕英雄傳", pub_date=datetime(year=1990,month=1,day=10)) book.save()
查找圖書信息:
book = Book.objects.get(pk=1) book.id book.title book.pub_date
修改圖書信息:
book.title = "天龍八部" book.save()
刪除圖書信息:
book.delete()
添加關(guān)聯(lián)對(duì)象
# 書籍的創(chuàng)建 book = Book(title="倚天屠龍記", pub_date=datetime(year=1990,month=1,day=10)) book.save() # 人物的創(chuàng)建 info1 = "峨眉第四代掌門人,先為峨眉派掌門滅絕師太的徒兒,頗獲滅絕師太歡心并對(duì)她>青睞有加,將峨 眉派鎮(zhèn)派之寶“蛾眉九陽(yáng)功”傳給了她,張無(wú)忌的追求者之一。" info2 = "原名敏敏特穆爾,汝陽(yáng)王(朝廷大將軍察罕特穆爾)的女兒,封號(hào)“紹敏郡主”,>趙敏是她的漢 名,是從她的封號(hào)“紹敏郡主”而來(lái)。" hero1 = Hero(name="周芷若", gender=False, info=info1) hero2 = Hero(name="趙敏", gender=False, info=info2) hero1.Book=book hero2.Book=book hero1.save() hero2.save()
獲得關(guān)聯(lián)集合:返回當(dāng)前book對(duì)象的所有hero
book.hero_set.all()
有一個(gè) Hero 存在,必須要有一個(gè) Book 對(duì)象,提供了創(chuàng)建關(guān)聯(lián)的數(shù)據(jù):
book.hero_set.create(name="張無(wú)忌", gender=True, content="武當(dāng)派第二代“張五俠”張翠山與天鷹教紫微堂堂主殷素素的兒子")
第四步: 啟用后臺(tái) Admin 站點(diǎn)管理、
站點(diǎn)分為“內(nèi)容發(fā)布(后臺(tái)管理)”和“公共訪問(前臺(tái)管理)”兩部分
“內(nèi)容發(fā)布”的部分負(fù)責(zé)添加、修改、刪除內(nèi)容,開發(fā)這些重復(fù)的功能是一件單調(diào)乏味、缺乏創(chuàng)造力
的工作。
因此, Django 會(huì)根據(jù)定義的模型類完全自動(dòng)地生成管理模塊
Django 框架中有一個(gè)非常強(qiáng)大的應(yīng)用功能: 自動(dòng)管理界面。 常被Web平臺(tái)管理者使用,去管理整個(gè)
Web平臺(tái)。
默認(rèn)情況下,在 settings.py 配置文件中 INSTALLED_APPS 包含以下應(yīng)用程序,為了后續(xù)的開發(fā),默
認(rèn)這些應(yīng)用程序都是包含在里面的。
(1). 數(shù)據(jù)庫(kù)遷移
使用這些 Django 自帶的應(yīng)用程序,需要我們?cè)跀?shù)據(jù)庫(kù)中創(chuàng)建一些數(shù)據(jù)表對(duì)應(yīng),然后才能使用它們。
python manage.py makemigrations python manage.py migrate
(2). 創(chuàng)建管理員用戶
# 按提示輸入用戶名、郵箱、密碼 python manage.py createsuperuser
啟動(dòng)服務(wù)器,通過 “127.0.0.1:8000/admin” 訪問,輸入上面創(chuàng)建的用戶名、密碼完成登錄
進(jìn)入管理站點(diǎn),默認(rèn)可以對(duì) groups、users 進(jìn)行管理
(3). 管理界面本地化
編輯 settings.py 文件,設(shè)置編碼、時(shí)區(qū)
LANGUAGE_CODE = 'zh-Hans' TIME_ZONE = 'Asia/Shanghai'
(4). 自定義模型加入后臺(tái)管理
打開 bookApp/admin.py 文件,注冊(cè)模型
from django.contrib import admin from models import Book admin.site.register(Book)
刷新管理頁(yè)面,可以對(duì) Book 的數(shù)據(jù)進(jìn)行增刪改查操作 ;
問題一: python2 版本中, 如果在 str 方法中返回中文,在修改和添加時(shí)會(huì)報(bào) ascii 的錯(cuò)誤
在 str() 方法中,將字符串末尾添加 “.encode('utf-8')” 進(jìn)行字符串編碼
問題二: 后臺(tái)管理時(shí), Book管理顯示的是英文, 如何變成中文?
# bookApp/models.py class Book(models.Model): # ........此處省略 # 自定義對(duì)應(yīng)的表名,默認(rèn)表名:bookApp_book class Meta: db_table = "books" # 單數(shù)時(shí)顯示的名稱 verbose_name = '圖書信息' # 復(fù)數(shù)時(shí)顯示的名稱 verbose_name_plural = '圖書信息'
(5). 自定義管理頁(yè)面
Django 提供了 admin.ModelAdmin 類
通過定義 ModelAdmin 的子類,來(lái)定義模型在 Admin 界面的顯示方式
# bookApp/admin.py from django.contrib import admin from .models import Book, Hero # 書籍自定義管理頁(yè)面 class BookAdmin(admin.ModelAdmin): list_display = ['pk', 'title', 'pub_date'] list_filter = ['title'] search_fields = ['title'] list_per_page = 10# fields = ['pub_date', 'title'] fieldsets = [('基礎(chǔ)信息', {'fields': ['title']}), ('詳細(xì)信息', {'fields': ['pub_date']}), ] # 人物自定義管理頁(yè)面 class HeroAdmin(admin.ModelAdmin): list_display = ['id', 'name', 'gender', 'content'] list_filter = ['name'] search_fields = ['name'] list_per_page = 10 # 關(guān)聯(lián)注冊(cè) admin.site.register(Book, BookAdmin) admin.site.register(Hero, HeroAdmin)
列表頁(yè)屬性性
ist_display:顯示字段,可以點(diǎn)擊列頭進(jìn)行排序 list_display = ['pk', 'title', 'pub_date'] list_filter:過濾字段,過濾框會(huì)出現(xiàn)在右側(cè) list_filter = ['title'] search_fields:搜索字段,搜索框會(huì)出現(xiàn)在上側(cè) search_fields = ['title'] list_per_page:分頁(yè),分頁(yè)框會(huì)出現(xiàn)在下側(cè) list_per_page = 10
添加、修改頁(yè)屬性
fields:屬性的先后順序 fields = ['pub_date', 'title'] fieldsets :屬性分組, 注意: fields和fieldsets 只能設(shè)置一個(gè). fieldsets = [('基礎(chǔ)信息', {'fields': ['title']}), ('詳細(xì)信息', {'fields': ['pub_date']}), ]
關(guān)聯(lián)對(duì)象
對(duì)于 Hero 模型類,有兩種注冊(cè)方式
方式一:與 Book 模型類相同
方式二:關(guān)聯(lián)注冊(cè)
admin.StackedInline : 內(nèi)嵌關(guān)聯(lián)注冊(cè)類
admin.TabularInline : 表格 關(guān)聯(lián)注冊(cè)類
# bookApp/admin.py # class HeroInline(admin.TabularInline): class HeroInline(admin.StackedInline): model = Hero extra = 2 class BookAdmin(admin.ModelAdmin): list_display = ['pk', 'title', 'pub_date'] # .......此處省略部分重復(fù)代碼 inlines = [HeroInline]
顯示效果如下:
布爾值的顯示
發(fā)布性別的顯示不是一個(gè)直觀的結(jié)果,可以使用方法進(jìn)行封裝 # bookApp/models.py class Hero(models.Model): # .......此處省略部分重復(fù)代碼 def sex(self): if self.gender: return "男" else: return "女" 在 admin 注冊(cè)中使用 sex 代替 gender # bookApp/admin.py class HeroAdmin(admin.ModelAdmin): list_display = ['id', 'name', 'sex', 'content']
顯示效果如下:
關(guān)于python中如何使用Django框架就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。