django筆記

  • 2020 年 1 月 22 日
  • 筆記

裝飾器:require_http_method()

當然你可以在視圖函數內丟棄那些期望之外的請求(比如上例中的POST /report/1234/), 但更簡單的做法是使用Django預置的require_http_methods(methods)裝飾器進行限制, 讓框架幫你攔截那些不想要的請求。

例如,下面的示例聲明了視圖函數v_login()只支援GET和POST方法:

from django.views.decorators.http import require_http_methods  @require_http_methods(['GET','POST'])  def v_login(request):pass

這時,如果用戶試圖使用其他HTTP方法(比如DELETE)請求指向這個視圖函數的URL, Django框架將自動攔截並返回405錯誤 —— 在HTTP協議中,405程式碼表示:請求的方法 不被允許。

有幾個語法糖可以縮短require_http_method()這個裝飾器的書寫長度:

require_GET() - 聲明被裝飾的視圖僅支援GET方法  require_POST() - 聲明被裝飾的視圖僅支援POST方法  require_SAFE() - 聲明被裝飾的視圖僅支援GET和HEAD方法django實現delete/put方法:

django對於PUT/DELETE請求並沒有像POST/GET那樣有一個字典結構。我們需要手動處理request.body獲取參數:

from django.http import QueryDict      put = QueryDict(request.body)      key = put.get('key')      field = put.get('field')      field_value = put.get('field-value')

View Code

 外部項目調用djang 資料庫:

import os  os.environ.setdefault('DJANGO_SETTINGS_MODULE','kingcmdb.settings')  import django  django.setup()  from web import models    django 時區設置:

ANGUAGE_CODE = 'zh-hans'  #中文支援,django1.8以後支援;1.8以前是zh-cn TIME_ZONE = 'Asia/Shanghai' USE_I18N = True USE_L10N = True USE_TZ = False   #默認是Ture,時間是utc時間,由於我們要用本地時間,所用手動修改為false!!!!