Django-框架的介紹(一)

Django的起源&現(xiàn)狀

  • 2005年發(fā)布,采用Python語言編寫的開源web框架

  • 早期的時候Django主做新聞和內(nèi)容管理的

  • 一個重量級的 Python Web框架,Django 配備了常用的大部分組件

    1. 基本配置
    2. 路由系統(tǒng)
    3. 原生HTML模板系統(tǒng)
    4. 視圖 view
    5. Model模型,數(shù)據(jù)庫連接和ORM數(shù)據(jù)庫管理
    6. 中間件
    7. Cookie & Seesion
    8. 分頁
    9. 數(shù)據(jù)庫后臺管理系統(tǒng)admin
  • Django的用途

    • 網(wǎng)站后端開發(fā)
    • 微信公眾號、微信小程序等后臺開發(fā)
    • 基于HTTP/HTTPS協(xié)議的后臺服務(wù)器開發(fā)
      • 在線語音/圖像識別服務(wù)器
      • 在線第三方身份驗(yàn)證服務(wù)器等
  • Django的版本

    • 最新版本:3.0.x
    • 當(dāng)前教學(xué)版本:2.2.12
  • Django的官網(wǎng)

Django的安裝

  • 查看已安裝的版本

    >>> import django
    >>> print(django.VERSION)
    (2, 2, 12, 'final', 0)
    
  • 安裝

    1. 在線安裝
      • $ sudo pip3 install django 安裝django的最新版本
      • $ sudo pip3 install django[==版本] 安裝django的指定版本
      • 如:
        • `$ sudo pip3 install django==2.2.12
    2. 離線安裝
      • 下載安裝包:
      • 安裝離線包
        • $ tar -xvf Django-2.2.12.tar.gz
        • $ cd Django-2.2.12
        • $ sudo python3 setup.py install
  • Django的卸載

  • $ pip3 uninstall django

  • Django 的開發(fā)環(huán)境

    • Django 2.2.12 支持 3.5陪拘,3.6,3.7搭儒,3.8

創(chuàng)建Django項(xiàng)目

創(chuàng)建項(xiàng)目的指令

  • $ django-admin startproject 項(xiàng)目名稱

  • 如:

    • $ django-admin startproject mysite1
  • 運(yùn)行

    $ cd mysite1
    $ python3 manage.py runserver
    # 或
    $ python3 manage.py runserver 5000  # 指定只能本機(jī)使用127.0.0.1的5000端口訪問本機(jī)
    

Django項(xiàng)目的目錄結(jié)構(gòu)

  • 示例:

    $ django-admin startproject mysite1
    $ tree mysite1/
    mysite1/
    ├── manage.py
    └── mysite1
        ├── __init__.py
        ├── settings.py
        ├── urls.py
        └── wsgi.py
    
    1 directory, 5 files
    
  • 項(xiàng)目目錄結(jié)構(gòu)解析:

    • manage.py
      • 此文件是項(xiàng)目管理的主程序,在開發(fā)階段用于管理整個項(xiàng)目的開發(fā)運(yùn)行的調(diào)式
      • manage.py 包含項(xiàng)目管理的子命令, 如:
        • python3 manage.py runserver 啟動服務(wù)
        • python3 manage.py startapp 創(chuàng)建應(yīng)用
        • python3 manage.py migrate 數(shù)據(jù)庫遷移
        • ...
    • mysite1 項(xiàng)目文件夾
      • 項(xiàng)目包的主文件夾(默認(rèn)與項(xiàng)目名稱一致)
      1. __init__.py
        • 包初始化文件,當(dāng)此項(xiàng)目包被導(dǎo)入(import)時此文件會自動運(yùn)行
      2. wsgi.py
        • WSGI 即 Web Server Gateway Interface
        • WEB服務(wù)網(wǎng)關(guān)接口的配置文件扇丛,僅部署項(xiàng)目時使用
      3. urls.py
        • 項(xiàng)目的主路由配置文件,所有的動態(tài)路徑必須先走該文件進(jìn)行匹配
      4. settings.py
        • Django項(xiàng)目的配置文件, 此配置文件中的一些全局變量將為Django框架的運(yùn)行傳遞一些參數(shù)
        • setting.py 配置文件,啟動服務(wù)時自動調(diào)用擒滑,
        • 此配置文件中也可以定義一些自定義的變量用于作用全局作用域的數(shù)據(jù)傳遞

settings.py 文件介紹

https://docs.djangoproject.com/en/2.2/ref/settings/

  1. BASE_DIR

    • 用于綁定當(dāng)前項(xiàng)目的絕對路徑(動態(tài)計(jì)算出來的), 所有文件都可以依懶此路徑
  2. DEBUG

    • 用于配置Django項(xiàng)目的啟動模式, 取值:
      1. True 表示開發(fā)環(huán)境中使用 調(diào)試模式(用于開發(fā)中)
      2. False 表示當(dāng)前項(xiàng)目運(yùn)行在生產(chǎn)環(huán)境中(不啟用調(diào)試)
  3. ALLOWED_HOSTS

    • 設(shè)置允許訪問到本項(xiàng)目的host請求頭的值,取值:
      1. [] 空列表,表示只有host請求頭為127.0.0.1, localhost能訪問本項(xiàng)目 - DEBUG = True時生效
      2. ['*'],表示任何請求頭的host都能訪問到當(dāng)前項(xiàng)目
      3. ['192.168.1.3', '127.0.0.1'] 表示只有當(dāng)前兩個host頭的值能訪問當(dāng)前項(xiàng)目
      • 注意:
        • 如果要在局域網(wǎng)其它主機(jī)也能訪問此主機(jī),啟動方式應(yīng)使用如下模式:
    • python3 manage.py runserver 0.0.0.0:5000 # 指定網(wǎng)絡(luò)設(shè)備如果內(nèi)網(wǎng)環(huán)境下其他主機(jī)想正常訪問該站點(diǎn)叉弦,需加`ALLOWED_HOSTS = ['內(nèi)網(wǎng)ip']
  4. INSTALLED_APPS

    • 指定當(dāng)前項(xiàng)目中安裝的應(yīng)用列表
  5. MIDDLEWARE

    • 用于注冊中間件
  6. TEMPLATES

    • 用于指定模板的配置信息
  7. DATABASES

    • 用于指定數(shù)據(jù)庫的配置信息
  8. LANGUAGE_CODE

    • 用于指定語言配置
    • 取值:
      • 英文 : "en-us"
      • 中文 : "zh-Hans"
  9. TIME_ZONE

    • 用于指定當(dāng)前服務(wù)器端時區(qū)
    • 取值:
      • 世界標(biāo)準(zhǔn)時間: "UTC"
      • 中國時區(qū) : "Asia/Shanghai"
  10. ROOT_URLCONF

    • 用于配置根級 url 配置 'mysite1.urls'
    • 如:
      • ROOT_URLCONF = 'mysite1.urls'

注: 此模塊可以通過 from django.conf import settings 導(dǎo)入和使用

URL 介紹

URL定義

  • URL 即統(tǒng)一資源定位符 Uniform Resource Locator

  • 作用:

    • 用來表示互聯(lián)網(wǎng)上某個資源的地址丐一。
  • 說明:

    • 互聯(lián)網(wǎng)上的每個文件都有一個唯一的URL,它包含的信息指出文件的位置以及瀏覽器應(yīng)該怎么處理它淹冰。
  • URL的一般語法格式為:

    protocol :// hostname[:port] / path [?query][#fragment]
    
  • 如:

    http://tts.tmooc.cn/video/showVideo?menuId=657421&version=AID201908#subject
    
  • 說明:

    • protocol(協(xié)議)

      • http 通過 HTTP 訪問該資源库车。 格式 HTTP://
      • https 通過安全的 HTTPS 訪問該資源。 格式 HTTPS://
      • file 資源是本地計(jì)算機(jī)上的文件樱拴。格式: file:///
      • ...
    • hostname(主機(jī)名)

      • 是指存放資源的服務(wù)器的域名系統(tǒng)(DNS) 主機(jī)名柠衍、域名 或 IP 地址。
    • port(端口號)

      • 整數(shù)晶乔,可選珍坊,省略時使用方案的默認(rèn)端口;
      • 各種傳輸協(xié)議都有默認(rèn)的端口號瘪弓,如http的默認(rèn)端口為80垫蛆。
    • path(路由地址)

      • 由零或多個“/”符號隔開的字符串,一般用來表示主機(jī)上的一個目錄或文件地址。路由地址決定了服務(wù)器端如何處理這個請求
    • query(查詢)

      • 可選袱饭,用于給動態(tài)網(wǎng)頁傳遞參數(shù)川无,可有多個參數(shù),用“&”符號隔開虑乖,每個參數(shù)的名和值用“=”符號隔開懦趋。
    • fragment(信息片斷)

      • 字符串,用于指定網(wǎng)絡(luò)資源中的片斷疹味。例如一個網(wǎng)頁中有多個名詞解釋仅叫,可使用fragment直接定位到某一名詞解釋。
    • 注: [] 代表其中的內(nèi)容可省略

Django如何處理一個URL對應(yīng)的請求

瀏覽器  http://127.0.0.1:8000/page/2003/

1,Django 從配置文件中 根據(jù) ROOT_URLCONF 找到 主路由文件糙捺;默認(rèn)情況下诫咱,該文件在 項(xiàng)目同名目錄下的urls; 例如 mysite1/mysite1/urls.py
2,Django 加載 主路由文件中的 urlpatterns 變量
3,依次匹配 urlpatterns 中的 URL, 匹配到第一個合適的中斷后續(xù)匹配
4,匹配成功 - 調(diào)用對應(yīng)的視圖函數(shù)處理請求洪灯,返回響應(yīng)
5,匹配失敗 - 返回404響應(yīng)

主路由-urls.py樣例
from django.urls import path
from . import views
urlpatterns = [
    path('admin/', admin.site.urls)
    path('page/2003/', views.page_2003),
    path('page/2004/', views.page_2004),
]

視圖函數(shù)(view)

  • 視圖函數(shù)是用于接收一個瀏覽器請求并通過HttpResponse對象返回?cái)?shù)據(jù)的函數(shù)坎缭。此函數(shù)可以接收瀏覽器請求并根據(jù)業(yè)務(wù)邏輯返回相應(yīng)的內(nèi)容給瀏覽器

  • 視圖處理的函數(shù)的語法格式:

    def xxx_view(request[, 其它參數(shù)...]):
        return HttpResponse對象
    
  • 參數(shù):

    • request用于綁定HttpRequest對象,通過此對象可以獲取瀏覽器的參數(shù)和數(shù)據(jù)
  • 返回值

      HttpResponse的對象签钩;Django會提供一系列的response對象掏呼;
    
  • 示例:

    • 視圖處理函數(shù) views.py
      # file : <項(xiàng)目同名文件夾下>/views.py
      from django.http import HttpResponse
      def page1_view(request):
          html = "<h1>這是第1個頁面</h1>"
          return HttpResponse(html)
      

Django 路由配置

  • settings.py 中的ROOT_URLCONF 指定了主路由配置列表urlpatterns的文件位置
  • urls.py 主路由配置文件
    # file : <項(xiàng)目同名文件夾>/urls.py
    urlpatterns = [
        path('admin/', admin.site.urls),
        ...  # 此處配置主路由
    ]
    

path() 函數(shù)

  • 用于描述路由與視圖函數(shù)的對應(yīng)關(guān)系

  • 模塊

    • from django.urls import path
  • 語法:

    • path(route, views, name=None)
    • 參數(shù):
      1. route: 字符串類型,匹配的請求路徑
      2. views: 指定路徑所對應(yīng)的視圖處理函數(shù)的名稱
      3. name: 為地址起別名铅檩,在模板中地址反向解析時使用
  • 練習(xí)

    • 建立一個小網(wǎng)站:
      • 輸入網(wǎng)址: http://127.0.0.1:8000, 在網(wǎng)頁中輸出 : 這是我的首頁
      • 輸入網(wǎng)址: http://127.0.0.1:8000/page/1, 在網(wǎng)頁中輸出 : 這是編號為1的網(wǎng)頁
      • 輸入網(wǎng)址: http://127.0.0.1:8000/page/2, 在網(wǎng)頁中輸出 : 這是編號為2的網(wǎng)頁
      • 思考
        • 建立如上一百個網(wǎng)頁該怎么辦憎夷?
path轉(zhuǎn)換器

語法: <轉(zhuǎn)換器類型:自定義名>

作用:若轉(zhuǎn)換器類型匹配到對應(yīng)類型的數(shù)據(jù),則將數(shù)據(jù)按照關(guān)鍵字傳參的方式傳遞給視圖函數(shù)

轉(zhuǎn)換器 效果 案例
str 匹配除了 '/' 之外的非空字符串 "v1/users/<str:username>"匹配 /v1/users/guoxiaonao
int 匹配0或任何正整數(shù)昧旨。返回一個 int "page/<int:page>" 匹配 /page/100
slug 匹配任意由 ASCII 字母或數(shù)字以及連字符和下劃線組成的短標(biāo)簽 "detail/<slug:sl>" 匹配 /detail/this-is-django
path 匹配非空字段拾给,包括路徑分隔符 '/' "v1/users/<path:ph>"匹配 /v1/goods/a/b/c
  • 練習(xí):
    • 定義一個路由的格式為:

      • http://127.0.0.1:8000/整數(shù)/操作字符串/整數(shù)
    • 從路由中提取數(shù)據(jù),做相應(yīng)的操作后返回給瀏覽器

    • 如:

    輸入: 127.0.0.1:8000/100/add/200
        頁面顯示結(jié)果:300
    輸入: 127.0.0.1:8000/100/sub/200
        頁面顯示結(jié)果:-100
    輸入: 127.0.0.1:8000/100/mul/200
        頁面顯示結(jié)果:20000
    

re_path()函數(shù)

  • 在url 的匹配過程中可以使用正則表達(dá)式進(jìn)行精確匹配

  • 語法:

    • re_path(reg, view, name=xxx)
    • 正則表達(dá)式為命名分組模式(?P<name>pattern) 兔沃;匹配提取參數(shù)后用關(guān)鍵字傳參方式傳遞給視圖函數(shù)
  • 示例:

    • 路由配置文件
      # file : <項(xiàng)目同名文件夾>/urls.py
      # 以下示例匹配
      # 可匹配 http://127.0.0.1:8000/20/mul/40
      # 不可匹配 http://127.0.0.1:8000/200/mul/400
      urlpatterns = [
          path('admin/', admin.site.urls),
          re_path(r'^(?P<x>\d{1,2})/(?P<op>\w+)/(?P<y>\d{1,2})$',views.cal_view),
      ]
      
  • 練習(xí):

HTTP協(xié)議的請求和響應(yīng)

  • 請求是指瀏覽器端通過HTTP協(xié)議發(fā)送給服務(wù)器端的數(shù)據(jù)
  • 響應(yīng)是指服務(wù)器端接收到請求后做相應(yīng)的處理后再回復(fù)給瀏覽器端的數(shù)據(jù)

HTTP 請求

POST /v1/tokens HTTP/1.1     -> 起始行

Host: 127.0.0.1:8000         -> headers
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:74.0) Gecko/20100101 Firefox/74.0
Accept: */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/json
Content-Length: 58
Origin: http://127.0.0.1:7000
Connection: keep-alive
Referer: http://127.0.0.1:7000/dadashop/templates/login.html

{"username":"guoxiaonao"}     -> body 
  • 根據(jù)HTTP標(biāo)準(zhǔn)鸣戴,HTTP請求可以使用多種請求方法。
  • HTTP1.0定義了三種請求方法: GET, POST 和 HEAD方法(最常用)
  • HTTP1.1新增了五種請求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法粘拾。
  • HTTP1.1 請求詳述
    序號 方法 描述
    1 GET 請求指定的頁面信息,并返回實(shí)體主體创千。
    2 HEAD 類似于get請求缰雇,只不過返回的響應(yīng)中沒有具體的內(nèi)容,用于獲取報(bào)頭
    3 POST 向指定資源提交數(shù)據(jù)進(jìn)行處理請求(例如提交表單或者上傳文件)追驴。數(shù)據(jù)被包含在請求體中械哟。POST請求可能會導(dǎo)致新的資源的建立和/或已有資源的修改。
    4 PUT 從客戶端向服務(wù)器傳送的數(shù)據(jù)取代指定的文檔的內(nèi)容殿雪。
    5 DELETE 請求服務(wù)器刪除指定的頁面暇咆。
    6 CONNECT HTTP/1.1協(xié)議中預(yù)留給能夠?qū)⑦B接改為管道方式的代理服務(wù)器。
    7 OPTIONS 允許客戶端查看服務(wù)器的性能。
    8 TRACE 回顯服務(wù)器收到的請求爸业,主要用于測試或診斷其骄。
  • HttpRequest對象
    • 視圖函數(shù)的第一個參數(shù)是HttpRequest對象
    • 服務(wù)器接收到http協(xié)議的請求后,會根據(jù)請求數(shù)據(jù)報(bào)文創(chuàng)建HttpRequest對象
    • HttpRequest屬性
      • path_info: URL字符串
      • method:字符串扯旷,表示HTTP請求方法拯爽,常用值:'GET'、'POST'
      • GET:QueryDict查詢字典的對象钧忽,包含查詢字符串的所有數(shù)據(jù)
      • POST:QueryDict查詢字典的對象毯炮,包含post表單提交方式的所有數(shù)據(jù)
      • FILES:類似于字典的對象,包含所有的上傳文件信息
      • COOKIES:Python字典耸黑,包含所有的cookie桃煎,鍵和值都為字符串
      • session:似于字典的對象,表示當(dāng)前的會話
      • body: 字符串大刊,請求體的內(nèi)容(POST或PUT)
      • scheme : 請求協(xié)議('http'/'https')
      • request.get_full_path() : 請求的完整路徑
      • request.get_host() : 請求的主機(jī)
      • request.META : 請求中的元數(shù)據(jù)(消息頭)
        • request.META['REMOTE_ADDR'] : 客戶端IP地址

HTTP 響應(yīng)

HTTP/1.0 200 OK                        -> 起始行

Date: Sat, 21 Mar 2020 09:44:15 GMT    -> headers
Server: WSGIServer/0.2 CPython/3.6.8
Content-Type: application/json
X-Frame-Options: SAMEORIGIN
Content-Length: 217
Vary: Origin
Access-Control-Allow-Origin: *

{"code": 200, "username": "guoxiaonao"} -> body 
  • 當(dāng)瀏覽者訪問一個網(wǎng)頁時为迈,瀏覽者的瀏覽器會向網(wǎng)頁所在服務(wù)器發(fā)出請求。當(dāng)瀏覽器接收并顯示網(wǎng)頁前奈揍,此網(wǎng)頁所在的服務(wù)器會返回一個包含HTTP狀態(tài)碼的信息頭用以響應(yīng)瀏覽器的請求曲尸。

  • HTTP狀態(tài)碼的英文為HTTP Status Code。

  • 下面是常見的HTTP狀態(tài)碼:

    • 200 - 請求成功
    • 301 - 永久重定向-資源(網(wǎng)頁等)被永久轉(zhuǎn)移到其它URL
    • 302 - 臨時重定向
    • 404 - 請求的資源(網(wǎng)頁等)不存在
    • 500 - 內(nèi)部服務(wù)器錯誤
  • HTTP狀態(tài)碼分類

    • HTTP狀態(tài)碼由三個十進(jìn)制數(shù)字組成男翰,第一個十進(jìn)制數(shù)字定義了狀態(tài)碼的類型另患,后兩個數(shù)字沒有分類的作用。HTTP狀態(tài)碼共分為5種類型:

      分類 分類描述
      1** 信息蛾绎,服務(wù)器收到請求昆箕,需要請求者繼續(xù)執(zhí)行操作
      2** 成功,操作被成功接收并處理
      3** 重定向租冠,需要進(jìn)一步的操作以完成請求
      4** 客戶端錯誤鹏倘,請求包含語法錯誤或無法完成請求
      5** 服務(wù)器錯誤,服務(wù)器在處理請求的過程中發(fā)生了錯誤
  • Django中的響應(yīng)對象HttpResponse:

    • 構(gòu)造函數(shù)格式:

      • HttpResponse(content=響應(yīng)體, content_type=響應(yīng)體數(shù)據(jù)類型, status=狀態(tài)碼)
    • 作用:

      • 向客戶端瀏覽器返回響應(yīng)顽爹,同時攜帶響應(yīng)體內(nèi)容
    • 參數(shù):

      • content:表示返回的內(nèi)容纤泵。
      • status_code:返回的HTTP響應(yīng)狀態(tài)碼(默認(rèn)為200)。
      • content_type:指定返回?cái)?shù)據(jù)的的MIME類型(默認(rèn)為"text/html")镜粤。瀏覽器會根據(jù)這個屬性捏题,來顯示數(shù)據(jù)。如果是text/html肉渴,那么就會解析這個字符串公荧,如果text/plain,那么就會顯示一個純文本同规。
        • 常用的Content-Type如下:
          • 'text/html'(默認(rèn)的循狰,html文件)
          • 'text/plain'(純文本)
          • 'text/css'(css文件)
          • 'text/javascript'(js文件)
          • 'multipart/form-data'(文件提交)
          • 'application/json'(json傳輸)
        • 'application/xml'(xml文件)

        注: 關(guān)鍵字MIME(Multipurpose Internet Mail Extensions)是指多用途互聯(lián)網(wǎng)郵件擴(kuò)展類型窟社。

  • HttpResponse 子類

    類型 作用 狀態(tài)碼
    HttpResponseRedirect 重定向 302
    HttpResponseNotModified 未修改 304
    HttpResponseBadRequest 錯誤請求 400
    HttpResponseNotFound 沒有對應(yīng)的資源 404
    HttpResponseForbidden 請求被禁止 403
    HttpResponseServerError 服務(wù)器錯誤 500

Django處理GET和POST請求

  • 無論是GET還是POST,統(tǒng)一都由視圖函數(shù)接收請求绪钥,通過判斷request.method 區(qū)分具體的請求動作

  • 樣例:

    if request.method == 'GET':
        處理GET請求時的業(yè)務(wù)邏輯
    elif request.method == 'POST':
        處理POST請求的業(yè)務(wù)邏輯
    else:
        其他請求業(yè)務(wù)邏輯
    

GET處理

  • GET請求動作灿里,一般用于向服務(wù)器獲取數(shù)據(jù)

  • 能夠產(chǎn)生GET請求的場景:

    • 瀏覽器地址欄中輸入U(xiǎn)RL,回車后

    • <a href="地址?參數(shù)=值&參數(shù)=值">

    • form表單中的method為get

      <form method='get' action="/user/login">
          姓名:<input type="text" name="uname">
      </form>
      
  • GET請求方式中,如果有數(shù)據(jù)需要傳遞給服務(wù)器昧识,通常會用查詢字符串(Query String)傳遞 【注意:不要傳遞敏感數(shù)據(jù)】

    • URL 格式: xxx?參數(shù)名1=值1&參數(shù)名2=值2...

      • 如: http://127.0.0.1:8000/page1?a=100&b=200
    • 服務(wù)器端接收參數(shù)

      獲取客戶端請求GET請求提交的數(shù)據(jù)

      request.GET['參數(shù)名']  # QueryDict
      request.GET.get('參數(shù)名','默認(rèn)值')
      request.GET.getlist('參數(shù)名')
      # mypage?a=100&b=200&c=300&b=400
      # request.GET=QueryDict({'a':['100'], 'b':['200','400'], 'c':['300']})
      # a = request.GET['a']
      # b = request.GET['b']  # Error
      

POST處理

  • POST請求動作钠四,一般用于向服務(wù)器提交大量數(shù)據(jù)

  • 客戶端通過表單等POST請求將數(shù)據(jù)傳遞給服務(wù)器端,如:

    <form method='post' action="/login">
        姓名:<input type="text" name="username">
        <input type='submit' value='登陸'>
    </form>
    
    • form 表單的name屬性

      • 在form表單控件提交數(shù)據(jù)時,會自動搜索本表單控件內(nèi)部的子標(biāo)簽的name屬性及相應(yīng)的值跪楞,再將這些名字和值以鍵-值對的形式提交給action指定的服務(wù)器相關(guān)位置

      • 在form內(nèi)能自動搜集到的name屬性的標(biāo)簽的控件有

        <input name='xxx'>
        <select name='yyy'></select>
        <textarea name='zzz'></textarea>
        
  • 服務(wù)器端接收參數(shù)

    • 通過 request.method 來判斷是否為POST請求,如:
    if request.method == 'POST':
        處理POST請求的數(shù)據(jù)并響應(yīng)
    else:
        處理非POST 請求的響應(yīng)
    
  • 使用post方式接收客戶端數(shù)據(jù)

request.POST['參數(shù)名'] # request.POST 綁定QueryDict
request.POST.get('參數(shù)名','')
request.POST.getlist('參數(shù)名')


- 取消csrf驗(yàn)證,否則Django將會拒絕客戶端發(fā)來的POST請求

- 取消 csrf 驗(yàn)證

  - 禁止掉 settings.py 中 MIDDLEWARE 中的 CsrfViewsMiddleWare 的中間件

  ```python
  MIDDLEWARE = [
      ...
      # 'django.middleware.csrf.CsrfViewMiddleware',
      ...
  ]
  ```
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末缀去,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子甸祭,更是在濱河造成了極大的恐慌缕碎,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件池户,死亡現(xiàn)場離奇詭異咏雌,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)校焦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進(jìn)店門赊抖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人寨典,你說我怎么就攤上這事氛雪。” “怎么了耸成?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵报亩,是天一觀的道長。 經(jīng)常有香客問我井氢,道長弦追,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任花竞,我火速辦了婚禮劲件,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘约急。我一直安慰自己寇仓,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布烤宙。 她就那樣靜靜地躺著,像睡著了一般俭嘁。 火紅的嫁衣襯著肌膚如雪躺枕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天,我揣著相機(jī)與錄音拐云,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛湖蜕,可吹牛的內(nèi)容都是我干的提完。 我是一名探鬼主播,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼薇缅,長吁一口氣:“原來是場噩夢啊……” “哼危彩!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起泳桦,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤汤徽,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后灸撰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體谒府,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年浮毯,在試婚紗的時候發(fā)現(xiàn)自己被綠了完疫。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡债蓝,死狀恐怖壳鹤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情惦蚊,我是刑警寧澤器虾,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站蹦锋,受9級特大地震影響兆沙,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜莉掂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一葛圃、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧憎妙,春花似錦库正、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至抚垃,卻和暖如春喷楣,著一層夾襖步出監(jiān)牢的瞬間趟大,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工铣焊, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留逊朽,地道東北人。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓曲伊,卻偏偏與公主長得像叽讳,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子坟募,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Django框架的介紹 Django的官網(wǎng) 官方網(wǎng)址: http://www.djangoproject.com ...
    劉韜閱讀 460評論 0 0
  • Python Web開發(fā)Django-01 一岛蚤、基礎(chǔ)知識 C/S與B/S django框架 MVC django的...
    riverstation閱讀 1,082評論 0 0
  • 一、概要 視圖可以一個python函數(shù)婿屹,可以叫視圖函數(shù)灭美,或者簡稱視圖,也可以是是一個類昂利,定義在views.py 文...
    唯老閱讀 467評論 0 8
  • 一届腐、Django框架前言知識: 1、C/S和B/S的區(qū)別: C/S結(jié)構(gòu)軟件:客戶端/服務(wù)端軟件蜂奸,即客戶端要自己下載...
    月下獨(dú)酌123閱讀 4,532評論 0 36
  • 軟件框架 定義 一個軟件是由其中各個軟件模塊組成的犁苏,每一個模塊都有特定的功能,模塊與模塊之間通過相互配合來完成軟件...
    jxvl假裝閱讀 562評論 0 0