最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Django框架靜態(tài)文件處理、中間件、上傳文件操作實例詳解

 更新時間:2020年02月29日 17:54:45   作者:張行之  
這篇文章主要介紹了Django框架靜態(tài)文件處理、中間件、上傳文件操作,結(jié)合實例形式詳細分析了Django框架中靜態(tài)文件處理、中間件及上傳文件操作相關(guān)實現(xiàn)技巧與注意事項,需要的朋友可以參考下

本文實例講述了Django框架靜態(tài)文件處理、中間件、上傳文件操作。分享給大家供大家參考,具體如下:

Django靜態(tài)文件處理、中間件、上傳文件

靜態(tài)文件處理

在Django中,一般專門創(chuàng)建一個static目錄來存放靜態(tài)文件(css,js,image,video等文件)。

a. 在創(chuàng)建目錄前,我們需要配置靜態(tài)文件的路徑。如:

#在項目的settings.py文件中,配置STATIC_URL,一般默認是:

STATIC_URL = '/static/'   # '/static/'是指uri,映射下面的static目錄。做映射可以對靜態(tài)文件起到一個保護作用,避免受到攻擊,下面介紹。

STATICFILES_DIRS = [
  # 指定文件目錄,BASE_DIR指的是項目目錄,static是指存放靜態(tài)文件的目錄。
  os.path.join(BASE_DIR , 'static'), 
]

b. 創(chuàng)建static目錄,如圖:

image

c. 例子

{% load static from staticfiles %} <!--從staticfiles中導入靜態(tài)文件-->
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
<!--使用硬編碼的方式請求圖片,如果配置中的STATIC_URL的uri改變,這種硬編碼的形式就加載不到資源-->
<img src="/static/myapp/1.png" alt="image"/>

<br/>

<!--使用映射的方式加載圖片,可以避免uri短鏈接改變導致圖片資源加載不到的問題,要用這種方式,需要導入第一行-->
<img src="{% static 'myapp/1.png' %}" alt="image"/>


</body>
</html>

中間件

中間件是一個輕量級、底層的插件系統(tǒng),可以介入Django的請求和響應處理過程,修改Django的輸入或輸出。

a. 在Django中,中間件配置

在項目的settings.py文件中,有一個MIDDLEWARE_CLASSES的變量,里面定義的就是中間件。如:

MIDDLEWARE_CLASSES = [
  'django.middleware.security.SecurityMiddleware',
  'django.contrib.sessions.middleware.SessionMiddleware',
  'django.middleware.common.CommonMiddleware',
  'django.middleware.csrf.CsrfViewMiddleware',
  'django.contrib.auth.middleware.AuthenticationMiddleware',
  'django.contrib.messages.middleware.MessageMiddleware',
  'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

在settings.py文件中,默認是MIDDLEWARE,我們要是用中間件,需要改成MIDDLEWARE_CLASSES

b. 每個中間件都是一個獨立的Python類,可以定義下面的方法一個或多個:

__init__:無需任何參數(shù),服務器響應第一個請求的時候調(diào)用一次,用于確定是否用當前中間件。

process_request(request):執(zhí)行視圖之前被調(diào)用,在每個請求上調(diào)用,返回None或HttpResponse對象。

process_view(request,view_func,view_args,view_kwargs):調(diào)用視圖之前調(diào)用,在每個請求上調(diào)用,返回None或HttpResponse對象。

process_template_response(request,response):在視圖剛好執(zhí)行完畢之后調(diào)用,在每個請求上調(diào)用,返回實現(xiàn)了render方法的響應對象。

process_response(request,response):所有響應返回瀏覽器之前被調(diào)用,在每個請求上調(diào)用,返回HttpResponse對象。

process_exception(request,response,exception):當視圖拋出異常時調(diào)用,在每個請求上調(diào)用,返回一個HttpResponse對象。

如圖:

image

使用中間件,可以干擾整個處理過程,每次請求中都會執(zhí)行中間件的方法。中間件是實際上是AOP(面向切片編程)的概念。

c. 示例

# 定義一個MyTrace類,作為中間件

class MyTrace(object):
  def process_request(self, request):
    print('process request')

  def process_view(self, request, views, views_args, views_kwargs):
    print('process view')

  def process_template_response(self, request, response):
    print('process template response')
    return render(request=request, template_name='base.html')

  def process_response(self, request, response):
    print('process response')
    return HttpResponse('process response')

  def process_exception(self, request, exception):
    print('process exception')
    return HttpResponse('exception')

配置中間件,將作為中間件的類天驕到配置

MIDDLEWARE_CLASSES = [
  'django.middleware.security.SecurityMiddleware',
  'django.contrib.sessions.middleware.SessionMiddleware',
  'django.middleware.common.CommonMiddleware',
  'django.middleware.csrf.CsrfViewMiddleware',
  'django.contrib.auth.middleware.AuthenticationMiddleware',
  'django.contrib.messages.middleware.MessageMiddleware',
  'django.middleware.clickjacking.XFrameOptionsMiddleware',
  'testdjango.middleware.MyTrace',  # 自定義中間件
]

配置url和定義視圖view

# 配置url,在urls.py文件中

urlpatterns = [
  url(r'^base$', view.base),
  url(r'exception$', view.myexception),
]


# 定義視圖,在view.py文件中定義

def base(request):
  print('base')
  return HttpResponse('response')


def myexception(request):
  print('myexception')
  int('abc')
  return HttpResponse('exception')

在瀏覽器輸入,127.0.0.1:8000/base,輸出

process request
process view
base
process response

在瀏覽器輸入,127.0.0.1:8000/exception,輸出

process request
process view
myexception
process exception
process response

上傳圖片

a. 配置上傳圖片的路徑

在settings.py文件中,配置MEDIA_ROOT,如:

MEDIA_ROOT = BASE_URL + '/static/media' # 一般配置成靜態(tài)文件目錄下

在項目中,創(chuàng)建/static/media/目錄

image

b. 配置url

在項目的urls.py文件,配置url,如:

urlpatterns = [
  url(r'upload/form/',view.form), # 上傳圖片的form表單
  url(r'upload/image/',view.image),  # 上傳圖片的url
]

c. 編寫模板

表單模板,upload_form.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
<form action="/upload/image/" method="post" enctype="multipart/form-data">
  {% csrf_token %}
  <input type="file" name="image">
  <br>
  <input type="submit" value="上傳">
</form>
</body>
</html>

d. 處理視圖邏輯

在view.py文件定義2個方法,分別為form()和image(),如:

def form(request):
  return render(request=request, template_name='update_form.html')


def image(request):
  if request.method == 'POST':
    image = request.FILES['image']
    imageName = os.path.join(settings.MEDIA_ROOT, image.name)
    print(imageName)
    with open(imageName, 'wb') as f:
      for image_part in image.chunks():
        f.write(image_part)
    return HttpResponse('上傳成功')
  else:
    return HttpResponse('method 方法 錯誤')

e. 瀏覽器操作

在瀏覽器中輸入,127.0.0.1:8000/upload/form

出現(xiàn)如下表單:

image

選擇圖片,點擊上傳,出現(xiàn)上傳成功,表示圖片已上傳到文件中。

希望本文所述對大家基于Django框架的Python程序設計有所幫助。

相關(guān)文章

  • django 自定義filter 判斷if var in list的例子

    django 自定義filter 判斷if var in list的例子

    今天小編就為大家分享一篇django 自定義filter 判斷if var in list的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • python math模塊的基本使用教程

    python math模塊的基本使用教程

    這篇文章主要介紹了python math模塊的基本使用教程,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2021-01-01
  • Python3.6實現(xiàn)連接mysql或mariadb的方法分析

    Python3.6實現(xiàn)連接mysql或mariadb的方法分析

    這篇文章主要介紹了Python3.6實現(xiàn)連接mysql或mariadb的方法,結(jié)合實例形式分析了Python3.6針對mysql或mariadb數(shù)據(jù)庫操作的相關(guān)模塊安裝、數(shù)據(jù)庫與表的創(chuàng)建、數(shù)據(jù)庫連接等操作技巧與注意事項,需要的朋友可以參考下
    2018-05-05
  • python 查找文件名包含指定字符串的方法

    python 查找文件名包含指定字符串的方法

    今天小編就為大家分享一篇python 查找文件名包含指定字符串的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • 利用python實現(xiàn)凱撒密碼加解密功能

    利用python實現(xiàn)凱撒密碼加解密功能

    這篇文章主要介紹了利用python實現(xiàn)凱撒密碼加解密功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • python switch 實現(xiàn)多分支選擇功能

    python switch 實現(xiàn)多分支選擇功能

    這篇文章主要介紹了python switch 實現(xiàn)多分支選擇功能,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • opencv python 2D直方圖的示例代碼

    opencv python 2D直方圖的示例代碼

    這篇文章主要介紹了opencv python 2D直方圖的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • 如何用Python 實現(xiàn)全連接神經(jīng)網(wǎng)絡(Multi-layer Perceptron)

    如何用Python 實現(xiàn)全連接神經(jīng)網(wǎng)絡(Multi-layer Perceptron)

    這篇文章主要介紹了如何用Python 實現(xiàn)全連接神經(jīng)網(wǎng)絡(Multi-layer Perceptron),幫助大家更好的進行機器學習,感興趣的朋友可以了解下
    2020-10-10
  • python中裝飾器級連的使用方法示例

    python中裝飾器級連的使用方法示例

    裝飾器本質(zhì)上是一個Python函數(shù),它可以讓其他函數(shù)在不需要做任何代碼變動的前提下增加額外功能,下面這篇文章主要給大家介紹了關(guān)于python中裝飾器級連的使用方法,需要的朋友可以參考借鑒,下面來一起學習學習吧。
    2017-09-09
  • Python遍歷zip文件輸出名稱時出現(xiàn)亂碼問題的解決方法

    Python遍歷zip文件輸出名稱時出現(xiàn)亂碼問題的解決方法

    這篇文章主要介紹了Python遍歷zip文件輸出名稱時出現(xiàn)亂碼問題的解決方法,實例分析了Python亂碼的出現(xiàn)的原因與相應的解決方法,需要的朋友可以參考下
    2015-04-04

最新評論

杭锦旗| 满城县| 洪湖市| 县级市| 盐边县| 永昌县| 紫金县| 朝阳县| 监利县| 疏勒县| 汉源县| 清新县| 汝城县| 惠安县| 东丽区| 岱山县| 南华县| 延寿县| 武宣县| 闵行区| 高清| 集贤县| 米脂县| 岑巩县| 临安市| 广州市| 婺源县| 历史| 三亚市| 甘孜| 达州市| 龙南县| 勐海县| 工布江达县| 东阿县| 罗城| 卢龙县| 贵州省| 台南市| 水城县| 商南县|