這篇文章將為大家詳細講解有關python中如何使用Django框架,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
第一次使用 Django ,那么你必須要照顧一些初始設置。也就是說,您需要自動生成一些建立 Django
項目的代碼。
從命令行 cd 到您要存儲代碼的目錄,然后運行以下命令:
django-admin startproject BookManage
進入項目目錄,目錄結構如下圖:

目錄說明:
manage.py :一個命令行工具,可以使你用多種方式對 Django 項目進行交互
內層的目錄:項目的真正的Python包
__init__.py :一個空文件,它告訴Python這個目錄應該被看做一個Python包
settings.py :項目的配置
urls.py :項目的URL聲明
wsgi.py :項目與 WSGI 兼容的Web服務器入口
(1) 創建第一個應用程序
Django 自帶一個實用程序,可以自動生成應用程序的基本目錄結構,因此您可以專注于編寫代碼而不
是創建目錄。
在一個項目中可以創建一到多個應用,每個應用進行一種業務處理
創建應用的命令:
python3 manage.py startapp bookApp
應用的目錄結構如下圖 :

(2) 編寫第一個視圖函數
打開文件 bookApp/views.py 并放入以下Python代碼:
from django.shortcuts import render
# Create your views here.
from django.http import HttpResponse
def index(request):
return HttpResponse("圖書管理系統")(3) 路由規則
在 bookApp 目錄中創建一個 URLconf ,創建一個名為 urls.py 。
# bookApp/urls.py from django.conf.urls import url from . import views urlpatterns = [ # 當用戶訪問bookApp應用的主頁時, 執行視圖函數index,反向根據名稱獲取url地址; url(r'^$', views.index, name='index'), ]
根據配置文件 BookManage/settings 可知路由查找的主文件是 BookManage/urls.py , 因此在該文件
添加一條 url 規則:
# 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),
# 當用戶訪問的url地址以book開頭, 請訪問bookApp.urls這個url配置文件進行匹配并執行對應
的視圖函數.
url(r'^book/', include('bookApp.urls')),
]include()函數允許引用其他 URLconfs 。
(4) 效果展示
啟動服務器
python3 manage.py runserver

訪問 url 地址: http:// 127.0.0.1:8000/book/ 如果看到主頁內容 圖書管理系統 即成功

(1). 數據庫創建
MariaDB [(none)]> create database BookManage charset=utf8;
(2). 連接 MySQL 數據庫配置
在 settings.py 文件中,通過DATABASES項進行數據庫設置
Django 支持的數據庫包括: sqlite 、 mysql 等主流數據庫
Django 默認使用 **SQLite** 數據庫
Django數據庫設置參考文檔
其中ENGINE設置為數據庫后端使用。內置數據庫后端有:
'django.db.backends.postgresql'
'django.db.backends.mysql'
'django.db.backends.sqlite3'
'django.db.backends.oracle'
在 BookManage/settings.py 文件中,通過DATABASES項進行數據庫設置:
# .......
# 注釋之前的sqlite數據庫;
# DATABASES = {
#
'default': {
#
'ENGINE': 'django.db.backends.sqlite3',
#
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
#
}
# }
# 添加新的Mysql數據庫連接;
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'BookManage',
'USER': 'root',
'PASSWORD': 'westos',
'HOST': 'localhost',
'PORT': '3306',
}
}
# .......
注意: Django 使用 MySQL 數據庫需要安裝 PyMySQL ,若已經安裝請略過。
pip install pymysql打開 BookManage/__init__.py ,寫入以下代碼導入 pymysql :
import pymysql # MySQLdb只支持Python2.*,還不支持3.可以用PyMySQL代替。 pymysql.install_as_MySQLdb()
(2). 創建數據庫模型
本示例完成“圖書-英雄”信息的維護,需要存儲兩種數據:圖書、英雄
圖書表結構設計: 表名: Book
圖書名稱: title
圖書發布時間: pub_date
英雄表結構設計: 表名: Hero
英雄姓名: name
英雄性別: gender
英雄簡介: hcontent
所屬圖書: hbook
圖書-英雄的關系為一對多
# bookApp/models.py
from django.db import models
# Create your models here.class Book(models.Model):
# 定義屬性:默認主鍵自增id字段可不寫
title = models.CharField(max_length=20)
pub_date = models.DateTimeField()
# 定義默認輸出格式
def __str__(self):
return "%d" % self.title
# 自定義對應的表名,默認表名: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
# 自定義對應的表名,默認表名:bookApp_hero
class Meta:
db_table = "heros"(3). 生成數據庫表
激活模型:編輯 settings.py 文件,將應用加入到 INSTALLED_APPS 中
# BookManage/settings.py # Application definition INSTALLED_APPS = [ # .......此處省略 'django.contrib.staticfiles', # 新添加的app 'bookApp', ]
生成遷移文件:根據模型類生成 sql 語句
python manage.py makemigrations
產生的遷移文件如下:

執行遷移:執行 sql 語句生成數據表
python manage.py migrate
數據庫中查看數據庫表是否創建成功?
$ 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). 數據庫模型基本操作
現在進入交互式的Python shell,并使用 Django 提供的免費 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()
添加關聯對象
# 書籍的創建 book = Book(title="倚天屠龍記", pub_date=datetime(year=1990,month=1,day=10)) book.save() # 人物的創建 info1 = "峨眉第四代掌門人,先為峨眉派掌門滅絕師太的徒兒,頗獲滅絕師太歡心并對她>青睞有加,將峨 眉派鎮派之寶“蛾眉九陽功”傳給了她,張無忌的追求者之一。" info2 = "原名敏敏特穆爾,汝陽王(朝廷大將軍察罕特穆爾)的女兒,封號“紹敏郡主”,>趙敏是她的漢 名,是從她的封號“紹敏郡主”而來。" hero1 = Hero(name="周芷若", gender=False, info=info1) hero2 = Hero(name="趙敏", gender=False, info=info2) hero1.Book=book hero2.Book=book hero1.save() hero2.save()
獲得關聯集合:返回當前book對象的所有hero
book.hero_set.all()
有一個 Hero 存在,必須要有一個 Book 對象,提供了創建關聯的數據:
book.hero_set.create(name="張無忌", gender=True, content="武當派第二代“張五俠”張翠山與天鷹教紫微堂堂主殷素素的兒子")
第四步: 啟用后臺 Admin 站點管理、
站點分為“內容發布(后臺管理)”和“公共訪問(前臺管理)”兩部分
“內容發布”的部分負責添加、修改、刪除內容,開發這些重復的功能是一件單調乏味、缺乏創造力
的工作。
因此, Django 會根據定義的模型類完全自動地生成管理模塊
Django 框架中有一個非常強大的應用功能: 自動管理界面。 常被Web平臺管理者使用,去管理整個
Web平臺。
默認情況下,在 settings.py 配置文件中 INSTALLED_APPS 包含以下應用程序,為了后續的開發,默
認這些應用程序都是包含在里面的。

(1). 數據庫遷移
使用這些 Django 自帶的應用程序,需要我們在數據庫中創建一些數據表對應,然后才能使用它們。
python manage.py makemigrations python manage.py migrate
(2). 創建管理員用戶
# 按提示輸入用戶名、郵箱、密碼 python manage.py createsuperuser
啟動服務器,通過 “127.0.0.1:8000/admin” 訪問,輸入上面創建的用戶名、密碼完成登錄
進入管理站點,默認可以對 groups、users 進行管理

(3). 管理界面本地化
編輯 settings.py 文件,設置編碼、時區
LANGUAGE_CODE = 'zh-Hans' TIME_ZONE = 'Asia/Shanghai'
(4). 自定義模型加入后臺管理
打開 bookApp/admin.py 文件,注冊模型
from django.contrib import admin from models import Book admin.site.register(Book)
刷新管理頁面,可以對 Book 的數據進行增刪改查操作 ;
問題一: python2 版本中, 如果在 str 方法中返回中文,在修改和添加時會報 ascii 的錯誤
在 str() 方法中,將字符串末尾添加 “.encode('utf-8')” 進行字符串編碼
問題二: 后臺管理時, Book管理顯示的是英文, 如何變成中文?

# bookApp/models.py class Book(models.Model): # ........此處省略 # 自定義對應的表名,默認表名:bookApp_book class Meta: db_table = "books" # 單數時顯示的名稱 verbose_name = '圖書信息' # 復數時顯示的名稱 verbose_name_plural = '圖書信息'

(5). 自定義管理頁面
Django 提供了 admin.ModelAdmin 類
通過定義 ModelAdmin 的子類,來定義模型在 Admin 界面的顯示方式
# bookApp/admin.py
from django.contrib import admin
from .models import Book, Hero
# 書籍自定義管理頁面
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 = [('基礎信息', {'fields': ['title']}),
('詳細信息', {'fields': ['pub_date']}), ]
# 人物自定義管理頁面
class HeroAdmin(admin.ModelAdmin):
list_display = ['id', 'name', 'gender', 'content']
list_filter = ['name']
search_fields = ['name']
list_per_page = 10
# 關聯注冊
admin.site.register(Book, BookAdmin)
admin.site.register(Hero, HeroAdmin)列表頁屬性性
ist_display:顯示字段,可以點擊列頭進行排序 list_display = ['pk', 'title', 'pub_date'] list_filter:過濾字段,過濾框會出現在右側 list_filter = ['title'] search_fields:搜索字段,搜索框會出現在上側 search_fields = ['title'] list_per_page:分頁,分頁框會出現在下側 list_per_page = 10

添加、修改頁屬性
fields:屬性的先后順序
fields = ['pub_date', 'title']
fieldsets :屬性分組, 注意: fields和fieldsets 只能設置一個.
fieldsets = [('基礎信息', {'fields': ['title']}),
('詳細信息', {'fields': ['pub_date']}), ]
關聯對象
對于 Hero 模型類,有兩種注冊方式
方式一:與 Book 模型類相同
方式二:關聯注冊
admin.StackedInline : 內嵌關聯注冊類
admin.TabularInline : 表格 關聯注冊類
# 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'] # .......此處省略部分重復代碼 inlines = [HeroInline]
顯示效果如下:

布爾值的顯示
發布性別的顯示不是一個直觀的結果,可以使用方法進行封裝 # bookApp/models.py class Hero(models.Model): # .......此處省略部分重復代碼 def sex(self): if self.gender: return "男" else: return "女" 在 admin 注冊中使用 sex 代替 gender # bookApp/admin.py class HeroAdmin(admin.ModelAdmin): list_display = ['id', 'name', 'sex', 'content']
顯示效果如下:

關于python中如何使用Django框架就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。