• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    Django靜態(tài)文件管理機制及最佳使用策略研究

    2023-11-14 08:05:46賈文雅尹雪婷白艷明張亮明
    現(xiàn)代計算機 2023年17期
    關(guān)鍵詞:文件夾靜態(tài)代碼

    王 祎,賈文雅,尹雪婷,白艷明,張亮明

    (1.山西藥科職業(yè)學(xué)院工商管理系,太原 030031;2.山西藥科職業(yè)學(xué)院器械工程系,太原 030031;3.山西藥科職業(yè)學(xué)院電教中心,太原 030031)

    0 引言

    Django 是一個廣受歡迎的Web 框架,用于開發(fā)現(xiàn)代的Web 應(yīng)用程序。它為開發(fā)者提供了許多有用的功能,包括靜態(tài)文件管理。雖然靜態(tài)文件管理是一項相對簡單的任務(wù),但如果不理解Django 的靜態(tài)文件管理機制,可能會導(dǎo)致在使用靜態(tài)文件時遇到各種問題。本文將結(jié)合項目開發(fā)實踐及相關(guān)文檔研究,對Django 的靜態(tài)文件管理機制進行深入解析,以幫助開發(fā)者更好地使用靜態(tài)文件,并在此基礎(chǔ)上提出了一種Django 靜態(tài)文件的使用策略,實現(xiàn)開發(fā)狀態(tài)和部署狀態(tài)的自由切換。

    1 Django靜態(tài)文件管理機制概述

    Django 在開發(fā)狀態(tài)(DEBUG=True)和部署狀態(tài)(DEBUG=False)下對靜態(tài)文件的處理方式有所不同。在開發(fā)狀態(tài)下,Django 使用django.contrib.staticfiles 進行靜態(tài)文件管理,靜態(tài)文件可以存放在應(yīng)用的static 子目錄中,也可以存放在STATICFILES_DIRS 指定的目錄中,Django 會自動掃描并管理這些目錄中的文件。

    而在部署狀態(tài)下,所有的靜態(tài)文件都需要放置到一個單獨的目錄中,再由專業(yè)的靜態(tài)文件服務(wù)器進行管理。開發(fā)者需要使用命令將開發(fā)狀態(tài)下的所有靜態(tài)文件收集到該文件夾中,并提供正確的靜態(tài)文件路徑給專業(yè)的服務(wù)器,以便服務(wù)器能夠正確地找到并管理這些文件[1]。

    2 Django使用靜態(tài)文件的一般方式

    一般來講,在使用Django 框架建立網(wǎng)站時,可以通過以下步驟來設(shè)置使用靜態(tài)文件[2]。

    第一步:啟用django.contrib.staticfiles

    在項目的settings.py文件中找到INSTALLED_APPS 設(shè)置項,保持其原有內(nèi)容不變,在列表的最后加入‘django.contrib.staticfiles’,代碼如下:

    一般在創(chuàng)建項目時默認已加入該項,所以通常不需要修改。

    第二步:設(shè)置訪問靜態(tài)文件時使用的基礎(chǔ)URL

    在項目的settings.py 文件中找到STATIC_URL(若找不到,則新建一個),將其值設(shè)置為‘/staticFiles/’,代碼如下:

    其中的‘/staticFiles/’可以修改為你想要使用的任何字符串,最后一個字符必須是斜線‘/’。

    第三步:在應(yīng)用文件夾下建立static文件夾

    每一個項目通常都會有多個應(yīng)用,假設(shè)在項目中存在一個名為myapp1 的應(yīng)用,要實現(xiàn)該應(yīng)用靜態(tài)文件的正確引用,需要在myapp1 目錄下建立static 文件夾,這個文件夾的名稱不可以更改,因為這是Django 默認查找的目錄。靜態(tài)文件需要存放在該static 文件夾下。該文件夾下還可以建立子文件夾。

    第四步:使用static標(biāo)簽引用靜態(tài)文件

    在應(yīng)用的模板文件中,首先使用{% load static %}導(dǎo)入static 標(biāo)簽,然后通過{% static“靜態(tài)文件相對路徑”%}就可以訪問到需要的靜態(tài)文件。

    3 應(yīng)用舉例

    下面以圖片為例,演示靜態(tài)文件的使用。假設(shè)有一個名稱為myWebSite 的Django 項目,該項目有兩個應(yīng)用myapp1 和myapp2。要實現(xiàn)圖片的正確引用,需要完成以下四個步驟:

    第一步:修改項目的設(shè)置,編輯myWeb-Site/settings.py文件,在其中加入如下代碼:

    這一步中除‘django.contrib.staticfiles’之外,‘myapp1’‘myapp2’也不可少,只有在這里聲明了應(yīng)用名稱,Django 才會到它們的目錄下去尋找static文件夾。

    第二步:編輯myWebSite/settings.py 文件,在其中加入如下代碼:

    這一步設(shè)定了訪問靜態(tài)文件的基礎(chǔ)URL。

    第三步:在應(yīng)用文件夾下建立static 文件夾。建好之后的目錄結(jié)構(gòu)如圖1 所示(隱藏了與靜態(tài)文件引用無關(guān)的內(nèi)容)。

    圖1 目錄結(jié)構(gòu)示例1

    在myapp1 中有一張圖片‘錢學(xué)森.jpg’,存放位置是myWebSite/myapp1/static。為了能正常訪問這張圖片,static 文件夾必須要在應(yīng)用目錄myapp1 之下,且名稱必須是static。類似的,myapp2要用到的靜態(tài)文件,需要放置到myWeb-Site/myapp2/static 文件夾之下。若有其它應(yīng)用,與此類似。

    第四步:在模板文件中引用‘錢學(xué)森.jpg’,可以通過以下代碼實現(xiàn):

    其中static 標(biāo)簽對應(yīng)的是STATIC_URL 的值,{%static“錢學(xué)森.jpg”%} 對應(yīng)的URL是:‘/static-Files/錢學(xué)森.jpg’,在模板中直接使用該地址也可以訪問到圖片文件。

    Django 將每個應(yīng)用的static 文件夾下的所有內(nèi)容都對應(yīng)到了‘/staticFiles/’這個URL 之下。若以‘python manage.py runserver 127.0.0.1:8000’啟動網(wǎng)站,則在瀏覽器中可以通過‘http://127.0.0.1:8000/staticFiles/錢學(xué)森.jpg’來訪問該圖片文件。

    4 可能遇到的問題和使用技巧

    (1)不使用{%load static%}能否引用圖片?

    不使用{% load static %}也能引用圖片,方法如下[3]:

    修改settings.py 文件,在其中加入如下代碼,原有代碼保持不變:

    以上設(shè)置完成之后重啟網(wǎng)站,就可以通過{{STATIC_URL}}來引用STATIC_URL 中的值。在模板中構(gòu)建靜態(tài)文件地址的代碼為:‘{{STATIC_URL}}錢學(xué)森.jpg’,其對應(yīng)的URL為‘/static_url/錢學(xué)森.jpg’。

    (2)在項目中存在多個應(yīng)用的時候,有些應(yīng)用的靜態(tài)文件可能會使用相同的名稱,同名靜態(tài)文件在引用時出現(xiàn)沖突怎么辦?

    是的,同名靜態(tài)文件確實會存在沖突。Django 在查找靜態(tài)文件時,以先找到者為準(zhǔn),所以如果存在同名文件,返回的地址對應(yīng)的是首先找到的文件,可能導(dǎo)致文件引用錯誤。

    為了解決這個問題,一般采用的方法是,在每個應(yīng)用的static 文件夾下再以應(yīng)用名稱建立一個文件夾,該應(yīng)用的所有的靜態(tài)文件都存放在該文件夾下,為了便于使用,一般會以js、css、imgs 等文件夾來區(qū)分靜態(tài)文件的類型,目錄結(jié)構(gòu)如圖2所示。

    圖2 目錄結(jié)構(gòu)示例2

    如圖2 所示,在myapp1/static 文件夾下再建立一個myapp1 文件夾,在myapp2/static 文件夾之下再建立一個myapp2 文件夾。這樣在引用myapp1 中的靜態(tài)文件‘錢學(xué)森.jpg’時,其引用地址是:

    而在應(yīng)用myapp2 中存在的同名文件,其引用地址是:

    如此一來,就不會出現(xiàn)地址沖突的問題了。

    (3)有一些靜態(tài)文件在很多應(yīng)用中都會用到,放到某一個應(yīng)用的static 文件夾下好像不太合適,該怎么辦?

    可以使用公共靜態(tài)文件夾,將公用文件存放在該文件夾下。公共靜態(tài)文件夾可以通過STATICFILES_DIRS 進行設(shè)定。編輯settings.py文件中,增加如下代碼:

    STATICFILES_DIRS=(‘common_static’,)

    將公共靜態(tài)文件存放到‘common_static’文件夾下即可。這里指定的文件夾可以使用絕對地址,也可以使用相對地址,相對地址是相對項目主目錄的地址。上面的代碼設(shè)置的就是一個相對地址。這里可以指定多個文件夾,文件夾名稱可以由用戶自行設(shè)定。這里的文件夾可以位于項目文件夾之外。絕對地址一般使用os. path. join(BASE_DIR,‘common_static’)這樣的方式來生成,避免硬編碼,具有更高的可移植性。Django 查找文件的順序是先查找STATICFILES_DIRS 中指定的文件夾,后查找應(yīng)用下的static文件夾。

    對公共靜態(tài)文件夾中的文件的引用方式與前面相同。

    (4)將settings.py 文件中的‘DEBUG=True’改為‘DEBUG=False’后,靜態(tài)文件訪問不了了,該怎么辦?(在部署狀態(tài)下如何使用靜態(tài)文件?)

    在網(wǎng)站開發(fā)時我們會將DEBUG 設(shè)置為True,以方便錯誤調(diào)試;在網(wǎng)站部署時,需要將DEBUG設(shè)置為False,以停止顯示詳細錯誤信息,提高網(wǎng)站的安全性。但在將DEBUG 設(shè)置為False之后,Django就由開發(fā)狀態(tài)轉(zhuǎn)為部署狀態(tài),其不再自動支持對靜態(tài)文件的訪問。此時需要使用第三方文件服務(wù)器提供靜態(tài)文件服務(wù)。

    開發(fā)者需要在settings.py 文件中設(shè)定STATIC_ROOT參數(shù),代碼如下:

    設(shè)定之后,運行python manage.py collectstatic 命令,它會將所有的靜態(tài)文件收集到staticRoot 文件夾之下。staticRoot 文件夾的名稱可以由用戶自定義,收集命令會自動建立該文件夾。該文件夾地址可以是絕對地址,也可以是相對地址,相對地址是相對項目主目錄的地址。該文件夾可以位于項目目錄之外。

    因為Django 的靜態(tài)文件服務(wù)在效率和安全性方面不夠成熟,不建議在部署時使用。需要改為使用其它專業(yè)的靜態(tài)文件服務(wù)器,一般比較常用的是Nginx。在靜態(tài)文件服務(wù)器軟件中將根目錄設(shè)置為STATIC_ROOT指定的目錄即可。

    不使用第三方靜態(tài)文件服務(wù)器,而是用Django 自身也可以在部署狀態(tài)下提供靜態(tài)文件服務(wù),詳見后文。

    (5)不使用django.contrib.staticfiles 能否訪問靜態(tài)文件?

    可以。以下方法適用于開發(fā)狀態(tài)。

    首先在settings.py 中設(shè)置DEBUG=True,然后將所有的靜態(tài)文件存放在STATIC_ROOT 指定的文件夾中,最后修改項目的根路由文件urls.py,代碼如下:

    該方法只有技術(shù)上的可行性,并沒有實用價值,因為在方便性上它不如‘staticfiles’,并且也僅適用于開發(fā)狀態(tài),列出僅供參考。

    (6)STATIC_URL 設(shè)置為‘static/’和‘/static/’有何區(qū)別?

    如果STATIC_URL 設(shè)置為‘static/’,那么它將以服務(wù)器提供的SCRIPT_NAME 的值為前綴,如果服務(wù)器沒有設(shè)置SCRIPT_NAME,則以‘/’為前綴,最終STATIC_URL 值為‘/static/’。因此,若服務(wù)器沒有提供SCRIPT_NAME 的話,這兩種設(shè)置的結(jié)果是一樣的。如果沒有特別的需要,為避免不確定性,建議設(shè)置為‘/static/’。

    5 靜態(tài)文件最佳使用策略

    Django 在開發(fā)狀態(tài)和部署狀態(tài)使用了不同的方式來處理靜態(tài)文件,增加了復(fù)雜性。開發(fā)者開發(fā)過程中經(jīng)常需要在開發(fā)狀態(tài)和部署狀態(tài)之間進行切換,此時可能需要反復(fù)進行靜態(tài)文件的收集操作,否則可能導(dǎo)致有些靜態(tài)文件無法正確顯示。有沒有一種方法可以避免這種反復(fù)的收集操作呢?

    有!由于‘django.contrib.staticfiles’在由開發(fā)狀態(tài)轉(zhuǎn)為部署狀態(tài)后,不再提供靜態(tài)文件服務(wù)。所以我們要放棄使用它,轉(zhuǎn)而通過手動設(shè)置提供靜態(tài)文件服務(wù),從而實現(xiàn)開發(fā)狀態(tài)和部署狀態(tài)的自由切換。具體實現(xiàn)步驟如下:

    第一步:修改項目設(shè)置文件settings.py,刪除‘django. contrib. staticfiles’和STATICFILES_DIRS,設(shè)置STATIC_URL=‘/static/’,STATIC_ROOT=‘staticRoot’。

    這一步停止了‘django.contrib.staticfiles’對靜態(tài)文件的自動管理,并將靜態(tài)文件的文件夾設(shè)定為項目根文件夾下的‘staticRoot’文件夾。

    第二步:在項目根路由文件urls.py 中增加以下代碼[4]:

    以上代碼設(shè)置了對‘staticRoot’目錄下的所有文件的訪問路由。使這些文件可以被正常訪問到。

    這些代碼放在根路由文件的末尾,在項目真正需要部署的時候?qū)⑵渥⑨尩艏纯伞?/p>

    第三步:由于不再使用‘django.contrib.staticfiles’管理靜態(tài)文件,所以也不能再使用應(yīng)用下的static 文件夾和公共靜態(tài)文件夾存放靜態(tài)文件。而是必須把所有的靜態(tài)文件統(tǒng)一放置到一個文件夾下。在第一步中我們設(shè)置了STATIC_ROOT=‘staticRoot’,是一個相對于項目根目錄的路徑,所以需要在項目根文件夾下建立static-Root文件夾,在其中建立應(yīng)用文件夾和分類文件夾以便于管理靜態(tài)文件,目錄結(jié)構(gòu)如圖3所示。

    圖3 目錄結(jié)構(gòu)示例3

    第四步在模板文件中使用如下代碼進行圖片文件引用:

    使用這種方式,我們在開發(fā)狀態(tài)和部署狀態(tài)之間進行切換時,靜態(tài)文件均可以正常顯示,不需要進行其他處理,對于網(wǎng)站開發(fā)過程中的運行測試提供了極大的便利。

    但在網(wǎng)站正式部署的時候,還是需要使用專業(yè)的文件服務(wù)器來管理靜態(tài)文件,以保證效率和安全性。這時需要將第二步中跟路由文件urls.py 中增加的代碼刪除或注釋掉,其它代碼無需修改。

    6 關(guān)于上傳文件的使用

    上傳文件也屬于靜態(tài)文件,Django 對它們的管理方式和以上方式類似。這里僅探討File-Field 字段對應(yīng)的文件的上傳方式。要實現(xiàn)文件的正確上傳,僅需在settings.py 文件中增加以下一條語句:

    該文件夾地址可以是絕對地址,也可以是相對地址,相對地址是相對項目主目錄的地址。該文件夾可以位于項目目錄之外。這里設(shè)置的是相對地址,因此需要在項目根目錄下建立uploadFiles 文件夾。之后使用Django 提供的admin管理頁面就可以正常上傳文件了。

    如果要訪問已上傳的文件,需要設(shè)置MEDIA_URL 和添加已上傳文件的路由。首先編輯settings.py文件,增加以下語句:

    接著修改項目的根路由文件urls.py,在其中添加以下語句:

    之后就可以實現(xiàn)對已上傳文件的正常訪問。這種方式同時適用于開發(fā)狀態(tài)和部署狀態(tài),在兩種狀態(tài)之間切換時不需要進行其它修改。同樣建議在項目正式部署時,改為由其它正式的靜態(tài)文件服務(wù)器提供服務(wù),同時將該條語句注釋或刪除。

    7 結(jié)語

    本文對Django 靜態(tài)文件管理機制進行了較為全面的解析,在此基礎(chǔ)上使用手動配置文件服務(wù)和單一文件夾管理靜態(tài)文件的方式,實現(xiàn)了Django 項目靜態(tài)文件管理的優(yōu)化,使開發(fā)者在進行網(wǎng)站開發(fā)測試時不需要手動進行靜態(tài)文件的收集操作及其他文件服務(wù)器的配置,簡化了開發(fā)者的操作,提高了Django 網(wǎng)站開發(fā)測試的便利性和工作效率。

    猜你喜歡
    文件夾靜態(tài)代碼
    磁力文件夾
    靜態(tài)隨機存儲器在軌自檢算法
    創(chuàng)世代碼
    動漫星空(2018年11期)2018-10-26 02:24:02
    創(chuàng)世代碼
    動漫星空(2018年2期)2018-10-26 02:11:00
    創(chuàng)世代碼
    動漫星空(2018年9期)2018-10-26 01:16:48
    創(chuàng)世代碼
    動漫星空(2018年5期)2018-10-26 01:15:02
    調(diào)動右鍵 解決文件夾管理三大難題
    TC一鍵直達常用文件夾
    電腦迷(2015年1期)2015-04-29 21:24:13
    機床靜態(tài)及動態(tài)分析
    機電信息(2015年9期)2015-02-27 15:55:56
    具7μA靜態(tài)電流的2A、70V SEPIC/升壓型DC/DC轉(zhuǎn)換器
    灵山县| 囊谦县| 黄石市| 威海市| 周口市| 白玉县| 东丽区| 塔河县| 肇庆市| 海林市| 鸡西市| 乐平市| 庆安县| 会东县| 青川县| 赣州市| 讷河市| 图木舒克市| 航空| 贡嘎县| 奇台县| 冷水江市| 临潭县| 拉孜县| 库伦旗| 木里| 高阳县| 繁昌县| 德钦县| 霍州市| 改则县| 哈密市| 仪陇县| 任丘市| 潍坊市| 重庆市| 卢氏县| 汶川县| 大新县| 昭通市| 铁岭县|