Django其他(站点、列表、上传
1.靜態(tài)文件:
- 項(xiàng)目中的CSS、圖片、js都是靜態(tài)文件
- 一般會(huì)將靜態(tài)文件放到一個(gè)單獨(dú)的目錄中,以方便管理
- 在html頁面中調(diào)用時(shí),也需要指定靜態(tài)文件的路徑,Django中提供了一種解析的方式配置靜態(tài)文件路徑
- 靜態(tài)文件可以放在項(xiàng)目根目錄下,也可以放在應(yīng)用的目錄下,由于有些靜態(tài)文件在項(xiàng)目中是通用的,所以推薦放在項(xiàng)目的根目錄下,方便管理
?
1.在項(xiàng)目/settings.py文件中定義靜態(tài)文件查找路徑
STATIC_URL ='/static/'
STATICFILES_DIRS = [
??? os.path.join(BASE_DIR,'static'),
]
?
2.在項(xiàng)目根目錄下創(chuàng)建static目錄,再創(chuàng)建img、css、js目錄
?
3.在應(yīng)用名稱booktest/views.py中定義視圖jingtai
defjingtai(request):
??? returnrender(request,'booktest/jingtai.html')
4.在booktest/urls.py中配置url
??? url(r'^jingtai/$',views.jingtai),
5.在templates/booktest/下創(chuàng)建jingtai.html文件
?
動(dòng)態(tài)配置:
{%load static from staticfiles%}
<img src="{%static "img/sg.png" %}"/>
?
?1.問題一:django如何確定當(dāng)前請(qǐng)求靜態(tài)文件?
??? http://127.0.0.1:8000/static/images/bjt.png
???答:請(qǐng)求路徑/static/images/bjt.png中開始的部分/static/
???與settings.py中STATIC_URL進(jìn)行對(duì)比,如果相同則認(rèn)為是靜態(tài)文件
?
?? 2. 問題二:在磁盤的哪個(gè)目錄下找靜態(tài)文件?
???答:判斷后剩下路徑images/bjt.png
???方案一:與settings.py中的STATICFILES_DIRS進(jìn)行拼接
???方案二:在應(yīng)用目錄下的static目錄下查找
?
?
2.中間件
- Django中的中間件是一個(gè)輕量級(jí)、底層的插件系統(tǒng),可以介入Django的請(qǐng)求和響應(yīng)處理過程,修改Django的輸入或輸出
- 中間件的設(shè)計(jì)為開發(fā)者提供了一種無侵入式的開發(fā)方式,增強(qiáng)了Django框架的健壯性,其它的MVC框架也有這個(gè)功能,名稱為IoC
- Django在中間件中常用方法不同的階段執(zhí)行:
- process_request
- process_view
- process_response
?
?1.問題一:什么時(shí)候使用中間件?
??? 答:當(dāng)大部分的視圖中都需要執(zhí)行一段相同代碼時(shí)
?
??? 2.問題二:怎么用?
??? 答:定義類,選擇函數(shù),安裝
?
??? 3.問題三:使用哪個(gè)函數(shù)呢?
??? 答:根據(jù)代碼的執(zhí)行時(shí)間來判斷
?
?
?
3.Admin站點(diǎn)
- 內(nèi)容發(fā)布的部分由網(wǎng)站的管理員負(fù)責(zé)查看、添加、修改、刪除數(shù)據(jù),開發(fā)這些重復(fù)的功能是一件單調(diào)乏味、缺乏創(chuàng)造力的工作,為此,Django能夠根據(jù)定義的模型類自動(dòng)地生成管理模塊
- 在Django項(xiàng)目中默認(rèn)啟用Admin管理站點(diǎn)
?
1.準(zhǔn)備工作:創(chuàng)建管理員的用戶名和密碼:
python manage.pycreatesuperuser
?
- 2.按提示填寫用戶名、郵箱、密碼
?
- 3.使用:在應(yīng)用的admin.py中注冊(cè)模型類
fromdjango.contrib import admin
from models import *
admin.site.register(AreaInfo)
- 4.輸入如下網(wǎng)址
http://127.0.0.1:8000/admin/
- 5.按提示填寫用戶名、密碼,點(diǎn)擊“Log in”按鈕登錄
?
管理類有兩種使用方式
- 1.注冊(cè)參數(shù):打開booktest/admin.py文件,注冊(cè)模型類代碼如下
admin.site.register(AreaInfo,AreaAdmin)
- 2.裝飾器:打開booktest/admin.py文件,在管理類上注冊(cè)模型類,代碼如下
@admin.register(AreaInfo)
class AreaAdmin(admin.ModelAdmin):
??? pass
?
列表頁選項(xiàng)
頁大小
- 每頁中顯示多少條數(shù)據(jù),默認(rèn)為每頁顯示100條數(shù)據(jù),屬性如下
list_per_page=100
?
“操作選項(xiàng)”的位置
- 頂部顯示的屬性,設(shè)置為True在頂部顯示,設(shè)置為False不在頂部顯示,默認(rèn)為True
actions_on_top=True
?
列表中的列
- 屬性如下
list_display=[模型字段1,模型字段2,...]
?
將方法作為列
- 列可以是模型字段,還可以是模型方法,要求方法有返回值
- 打開booktest/models.py文件,修改AreaInfo類如下
classAreaInfo(models.Model):
??? ...
??? def title(self):
??????? return self.atitle
- 打開booktest/admin.py文件,修改AreaAdmin類如下
classAreaAdmin(admin.ModelAdmin):
??? ...
?? ?list_display = ['id','atitle','title']
?
- 方法列是不能排序的,如果需要排序需要為方法指定排序依據(jù)
admin_order_field=模型類字段
?
列標(biāo)題
- 列標(biāo)題默認(rèn)為屬性或方法的名稱,可以通過屬性設(shè)置
- 需要先將模型字段封裝成方法,再對(duì)方法使用這個(gè)屬性,模型字段不能直接使用這個(gè)屬性
short_description='列標(biāo)題'
?
關(guān)聯(lián)對(duì)象
- 無法直接訪問關(guān)聯(lián)對(duì)象的屬性或方法,可以在模型類中封裝方法,訪問關(guān)聯(lián)對(duì)象的成員
- 打開booktest/models.py文件,修改AreaInfo類如下
classAreaInfo(models.Model):
??? ...
??? def parent(self):
??????? return self.aParent.atitle
?? ?parent.short_description='父級(jí)區(qū)域名稱'
?
右側(cè)欄過濾器
- 屬性如下,只能接收字段,會(huì)將對(duì)應(yīng)字段的值列出來,用于快速過濾
list_filter=[]
?
搜索框
- 屬性如下,用于對(duì)指定字段的值進(jìn)行搜索,支持模糊查詢
search_fields=[]
?
中文標(biāo)題
- 打開booktest/models.py文件,修改模型類,為屬性指定verbose_name參數(shù),即第一個(gè)參數(shù)
classAreaInfo(models.Model):
??? atitle=models.CharField('標(biāo)題',max_length=30)#名稱
?
編輯頁選項(xiàng)
顯示字段順序
- 屬性如下
fields=[]
?
分組顯示
- 屬性如下
fieldset=(
??? ('組1標(biāo)題',{'fields':('字段1','字段2')}),
??? ('組2標(biāo)題',{'fields':('字段3','字段4')}),
)
?
關(guān)聯(lián)對(duì)象
- 在一對(duì)多的關(guān)系中,可以在一端的編輯頁面中編輯多端的對(duì)象,嵌入多端對(duì)象的方式包括表格、塊兩種
- 類型InlineModelAdmin:表示在模型的編輯頁面嵌入關(guān)聯(lián)模型的編輯
- 子類TabularInline:以表格的形式嵌入
- 子類StackedInline:以塊的形式嵌入
- 打開booktest/admin.py文件,創(chuàng)建AreaStackedInline類
classAreaStackedInline(admin.StackedInline):
??? model = AreaInfo#關(guān)聯(lián)子對(duì)象
??? extra = 2#額外編輯2個(gè)子對(duì)象
?
重寫模板
- 在templates/目錄下創(chuàng)建admin目錄
- 打開當(dāng)前虛擬環(huán)境中Django的目錄,再向下找到admin的模板
- 將需要更改文件拷貝到第一步建好的目錄里,編輯文件
?
?
?
4.上傳圖片
- 在Django中上傳圖片包括兩種方式:
- 1.在管理頁面admin中上傳圖片
- 2.自定義form表單中上傳圖片
- 上傳圖片后,將圖片存儲(chǔ)在服務(wù)器上,然后將圖片的路徑存儲(chǔ)在表中
?
在管理頁面admin中上傳圖片
?
注冊(cè):admin.site.register(PicTest)
?
?
自定義form表單中上傳圖片
?
1.打開booktest/views.py文件,創(chuàng)建視圖
- 2.打開booktest/urls.py文件,配置url
- 3.在templates/booktest/目錄下創(chuàng)建模板pic_upload.html
- 注:在模板中定義上傳表單,要求如下
- ???????? form的屬性enctype="multipart/form-data"
- ???????? form的method為post
- ?????? ??input的類型為file
?
5.分頁
- Django提供了數(shù)據(jù)分頁的類,這些類被定義在django/core/paginator.py中
- 對(duì)象Paginator用于對(duì)列進(jìn)行一頁n條數(shù)據(jù)的分頁運(yùn)算
- 對(duì)象Page用于表示第m頁的數(shù)據(jù)
?
Paginator對(duì)象
- 方法init(列表,int):返回分頁對(duì)象,參數(shù)為列表數(shù)據(jù),每面數(shù)據(jù)的條數(shù)
- 屬性count:返回對(duì)象總數(shù)
- 屬性num_pages:返回頁面總數(shù)
- 屬性page_range:返回頁碼列表,從1開始,例如[1, 2, 3, 4]
- 方法page(m):返回Page對(duì)象,表示第m頁的數(shù)據(jù),下標(biāo)以1開始
?
Page對(duì)象
- 調(diào)用Paginator對(duì)象的page()方法返回Page對(duì)象,不需要手動(dòng)構(gòu)造
- 屬性object_list:返回當(dāng)前頁對(duì)象的列表
- 屬性number:返回當(dāng)前是第幾頁,從1開始
- 屬性paginator:當(dāng)前頁對(duì)應(yīng)的Paginator對(duì)象
- 方法has_next():如果有下一頁返回True
- 方法has_previous():如果有上一頁返回True
- 方法len():返回當(dāng)前頁面對(duì)象的個(gè)數(shù)
- 迭代頁面對(duì)象:訪問當(dāng)前頁面中的每個(gè)對(duì)象
?
總結(jié)
以上是生活随笔為你收集整理的Django其他(站点、列表、上传的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用Python requests po
- 下一篇: 7.排序、聚合函数、分组查询