日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Django笔记-5-视图

發(fā)布時間:2023/12/31 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Django笔记-5-视图 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

2019獨角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>

Django筆記-5-視圖

概述

作用

視圖接受web請求, 并相應(yīng)web請求;

本質(zhì)

視圖就是一個Python中的函數(shù)

相應(yīng)

  • 網(wǎng)頁
    • 重定向
    • 錯誤視圖
      • 404
      • 500
      • ...
  • Json數(shù)據(jù)
  • 過程: 用戶輸入網(wǎng)址→Django解析網(wǎng)址→(獲得訪問字段)→匹配urls→(獲得視圖函數(shù))→視圖通過模板渲染數(shù)據(jù)→返回給瀏覽器

url配置

配置流程

  • 制定根URL配置文件

    在project文件夾下, seetings.py文件夾下

    ROOT_URLCONF=‘project.urls’
  • urlpatterns

    • 一個url實例的列表

    • url對象

      • 正則表達式
      • 視圖名稱
      • 名稱
  • url匹配正則表達式的注意事項

    • 如果想要從url中獲取一個值, 需要對正則加小括號
      • 匹配正則前方不需要增加反斜杠
      • 正則前需要加r表示字符串不轉(zhuǎn)義
  • 引入其他url配置

    在應(yīng)用中創(chuàng)建urls.py文件, 定義此應(yīng)用的url方法, 在主項目文件urls.py中使用include()方法引入;

  • URL的反向解析

    • 概述

      如果在視圖/模板中使用了硬編碼鏈接, 在url配置發(fā)生改變時,動態(tài)生成鏈接的地址全部需要更改

    • 解決

      在使用鏈接時, 通過url配置的名稱,動態(tài)生成url地址

    • 作用

      使用url模板

      示例:

      # project/urls.py url(r'^', include('app.urls', namespace="app")) # app/urls.py url(r'^good/(\d+)/$)', views.good, name='good' # index.html <a href="/good/1/">硬編碼鏈接</a> <a href="{% url 'app:good ' 1 %}">反向解析鏈接</a>
  • 視圖函數(shù)

  • 定義視圖

    本質(zhì): 一個函數(shù)

    • 視圖參數(shù):

      • request:一個HttpRequest的實例
      • 通過正則表達式獲取的參數(shù)
    • 位置

      一般在views.py文件下定義

  • 錯誤視圖

    • 404視圖:找不到網(wǎng)頁時返回錯誤

      在templates目錄下定義404.html

      配置settings.py

      DEBUG=False
  • ALLOWED_HOST=[‘*’] # 允許任何人訪問 ```

    • 500視圖:在視圖代碼中出現(xiàn)錯誤

    • 400視圖:用戶的操作出現(xiàn)錯誤

    HttpRequest 對象

  • 概述

    服務(wù)器接收http請求后, 會根據(jù)報文創(chuàng)建HttpResponse對象;

    視圖的第一個參數(shù)就是HttpResponse對象

    Django創(chuàng)建的, 之后調(diào)用視圖時傳遞的視圖

  • 屬性

  • path: 請求的完整路徑, 不包括域名和端口;
  • method: 表示請求的方式, 常用的有GET/POST;
  • encoding: 表示瀏覽器提交的數(shù)據(jù)的編碼方式;(一般為UTF-8);
  • GET: 類似與字典的對象,包含了GET請求的所有參數(shù);
  • POST: 類似與字典的對象,包含了POST請求的所有參數(shù);
  • FILES: 類似與字典的對象,包含了所有上傳的額文件;
  • COOKIES: 字典對象, 包含所有cookie;
  • session: 類似字典的對象,表示當(dāng)前會話;
  • 方法

    is_ajax(): 如果是通過XMLHttpRequest發(fā)起的, 返回True

  • QueryDict對象

  • request對象中的GET/POST都屬于QueryDict對象;

  • 方法

    • get()

      作用: 根據(jù)鍵獲取值, 僅一個值

    • getlist()

      將鍵的值以列表的形式返回, 可以獲取多個值

  • GET屬性

    目的: 獲取瀏覽器傳遞給服務(wù)器的數(shù)據(jù)

  • POST屬性

    使用表單提交POST請求

    關(guān)閉CSRF

  • HttpResponse對象

  • 概述

    作用: 給瀏覽器返回數(shù)據(jù);

    HttpRequest對象是由django創(chuàng)建的, HttpResponse對象是由程序員創(chuàng)建

  • 用法

    • 不調(diào)用模板,直接返回數(shù)據(jù)

    • 調(diào)用模板

      • 使用render方法

        • 原型

          render(request, templateName, {context})

        • 作用

          結(jié)合數(shù)據(jù)和模板, 返回完成的HTML頁面

        • 參數(shù)

          request

          templateName

          context

        • 示例

          def students(request):student_list = Student.objects.all()return render(request, 'app/students.html',{"students": student_list})
  • 屬性

    • content: 返回內(nèi)容

    • charset: 返回數(shù)據(jù)的編碼格式

    • status_code: 響應(yīng)狀態(tài)

      200/304/404...

    • content-type: 指定輸出的MIME類型

  • 方法

    • init

      使用頁面內(nèi)容實例化HttpResponse對象

    • write(content)

      以文件的形式寫入

    • flush()

      以文件的形式輸出緩沖區(qū)

    • set_cookie(key, value=‘’, max_Age=None, exprise=None)

      設(shè)置cookies

    • delete_cookie(key)

      刪除cookie

      注意:

      如果刪除一個不存在的cookie , 那么什么都不會發(fā)生.

  • 子類HttpResponseRedirect

    • 功能

      重定向: 服務(wù)器端的跳轉(zhuǎn)

      簡寫: redirect()

      to 推薦使用反向解析

  • 子類JsonResponse

    • 返回json數(shù)據(jù), 一般用于異步請求(ajax)

    • __init__ :(self, data)

    • data: 字典對象

    • 注意: content-type類型為application/json

  • Session狀態(tài)保持

  • 概述

    • http協(xié)議是無狀態(tài)的, 每次請求都是一次新的請求, 不記住之前請求.

    • 客戶端與服務(wù)器端的一次通信就是一次會話

    • 為實現(xiàn)狀態(tài)的保持, 在客戶端或服務(wù)端存儲會話的數(shù)據(jù)

  • 存儲方式有cookie和session

    • cookie: 所有數(shù)據(jù)都存儲在客戶端, 不要存敏感數(shù)據(jù)(不安全,數(shù)據(jù)量小)
    • session: 所有數(shù)據(jù)存儲在服務(wù)端, 在客戶端用cookie存儲session_id
  • 目的

    在一段時間內(nèi)跟蹤請求者的狀態(tài), 可以實現(xiàn)跨頁面訪問當(dāng)前的請求者數(shù)據(jù)

  • 注意

    不同的請求者不共享此數(shù)據(jù), 與請求者一一對應(yīng).

  • 啟用session

    settings.py中

    • INSTALLED_APPS中默認(rèn)啟用

    • MIDDLEWARE中默認(rèn)啟用

  • 使用session

    • 啟用session后, 每個HttpRequest對象都有一個session屬性,就是一個類似字典的對象;

    • get(key, default=None): 根據(jù)鍵獲取session值

    • clear(): 清空所有的會話

    • flush(): 刪除當(dāng)前的會話和cookie

    • 設(shè)置過期時間:set_expiry(value)

      如果不設(shè)置,兩個星期后過期;

      value是整數(shù):例如10,表示10秒鐘;

    • 存儲session的位置

      • 數(shù)據(jù)庫: 默認(rèn)存儲在 數(shù)據(jù)庫中;
      • 緩存: 只存儲在本地內(nèi)存中, 如果丟失不能找回,比數(shù)據(jù)庫快;
      • 數(shù)據(jù)庫和緩存: 優(yōu)先從本地緩存中讀取, 讀取不到再去數(shù)據(jù)庫中獲取
    • 使用redis存儲session

      • pip install django-redis-session
  • 看老師犯了個錯誤的心得: 每個代碼都很重要.

    轉(zhuǎn)載于:https://my.oschina.net/frank1126/blog/3055816

    總結(jié)

    以上是生活随笔為你收集整理的Django笔记-5-视图的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。