Django - 檢視層 - 檢視函式及快捷方式
目錄
簡單的檢視
返回當前日期和時間作為HTML文件的檢視
from django.http import HttpResponse
import datetime
def current_time(request):
now = datetime.datetime.now()
html = '<p>It is now %s.</p>' % now
return HttpResponse(html)
- 首先從
django.http
模組匯入了HttpResponse
類, 以及Python的datetime
庫 - 然後定義了
current_time
檢視函式 - 每個檢視函式都接收一個
HttpRequest
物件作為第一位置引數, 一般取名為request
. - 該檢視返回一個
HttpResponse
物件, 其中包含生成的HTML頁面.
自定義各種錯誤頁面
首先在根URLconf中額外增加錯誤頁面的條目
from django.contrib import admin
from django.urls import path
from app import views
...
# 增加的條目
handler400 = views.bad_request
handler403 = views.permission_denied
handler404 = views.page_not_found
handler500 = views.error
app/views.py
from django.shortcuts import render
from django.views.decorators.csrf import requires_csrf_token
@requires_csrf_token
def bad_request(request, exception):
return render(request, '400.html')
@requires_csrf_token
def permission_denied(request, exception):
return render(request, '403.html')
@requires_csrf_token
def page_not_found(request, exception):
return render(request, '404.html')
@requires_csrf_token
def error(request, exception):
return render(request, '500.html')
然後根據自己的需求, 建立對應的400,403,404,500四個頁面.
只有當DEBUG設定為False時, 這些錯誤檢視才會被自動執行
非同步檢視
Django3.1開始支援非同步檢視函式
編寫非同步檢視函式, 只需要用Python的async def
關鍵字語法
from django.http import HttpResponse
import datetime
async def current_time(request):
now = datetime.datetime.now()
html = '<p>It is now %s.</p>' % now
return HttpResponse(html)
內建的快捷方法
render()
render(request, template_name, context=None, content_type=None, status=None, using=None)
結合一個給定的模板給一個給定的上下文字典, 返回一個渲染後的HtppResponse物件
必要引數 :
- request : 檢視函式處理的當前請求
- template_name : 要使用的模板的完整名稱或者模板名稱的列表, 如果是一個列表, 將使用其中能夠查詢到的第一個模板
可選引數
- context : 新增到模板上下文的一個資料字典. 使用Python內建的locals()方法, 可以將函式作用域內的所有變數一次性新增進去
- content_type : 用於生成的文件的MIME型別, 預設為’text/html’.
- status : 響應的狀態碼. 預設為200
- using : 用於載入模板使用的模板引擎的NAME
redirect()
redirect(to, args, permanent=False, *kwargs)
根據傳遞進來的url引數, 返回HttpResponseRedirect
引數to可以是 :
- 一個模型例項 : 將呼叫模型的get_absolute_url()函式, 反向解析出目的url.
- URL的name名稱 : 可能帶有引數 : reverse()將用於反向解析url.
- 一個絕對的或相對的URL : 將原封不動的作為重定向的目標位置.
示例 :
- 呼叫物件的get_absolute_url()方法來重定向URL
from django.shortcuts import redirect
def my_view(request):
obj = MyModel.objects.get(...)
return redirect(obj)
- 傳遞URL的name名稱, 內部會自動使用reverse()方法反向解析url.
def my_view(request):
return redirect('index_name', foo='bar')
get_object_or_404()
get_objects_or_404(klass, args, **kwargs)
- klass : 要獲取的物件的Model類名或者Queryset等.
- **kwargs : 查詢的引數
查詢某個物件, 找到了則進行下一步處理, 沒找到則返回404
示例 :
- 從MyModel中使用主鍵1獲取物件
from django.shortcuts import get_object_or_404
def my_view(request):
return get_object_or_404(MyModel, pk=1)
- 還可以傳遞一個QuerySet例項
get_object_or_404(Book, title__startswith='M', pk=1)
get_list_or_404()
返回一個給定模型管理器上filter()的結果, 並將結果對映為一個列表, 如果結果為空則彈出Http404異常
示例 :
從MyModel中獲取所有釋出出來的物件
from djang.shortcuts import get_list_or_404
def my_view(request):
my_objects = get_list_or_404(MyModel, published=True)
檢視裝飾器
require_http_methods()
用於限制可以訪問該檢視的HTTP方法
from django.viewsdecorators.http import require_http_methods
@require_http_methods(["GET", "POST"])
def my_view(request):
....
serve()檢視
使用者上傳的圖片,檔案等, 統稱為MEDIA
為了方便在開發過程中, 對MEDIA資源的使用和測試, Django內建了一個serve()檢視, 幫我們實現了通用的功能.
serve()檢視只能用於開發環境
使用步驟 :
根路由urls
from django.conf import settings
from django.urls import re_path
from djang.views.static import serve
if setting.DEBUG:
urlpatterns += [
re_path(r'^media/(?P<path>.*)$', serve, {
'document_root': settings.MEDIA_ROOT,
}),
]
在settings中新增下面的配置
MEDIA_URL = '/media/'
MEDIA_ROOT = '/media/'
在Django專案的根目錄下, 新建一個media資料夾, 將MEDIA資源放進去.
相關文章
- 【6】Django檢視函式Django函式
- Django 檢視層Django
- Django檢視層Django
- django 的類檢視和函式檢視-雜談Django函式
- django的檢視層Django
- Django之檢視層Django
- [Django框架之檢視層]Django框架
- Django框架之檢視層Django框架
- Django基礎三之檢視函式Django函式
- Django - 檢視層 - 生成CSV檔案Django
- Django進階之路由層和檢視層Django路由
- [Django REST framework - 檢視元件之檢視基類、檢視擴充套件類、檢視子類、檢視集]DjangoRESTFramework元件套件
- Django檢視之檢視類和中介軟體Django
- Django:路由與檢視Django路由
- php禁用函式設定及檢視方法詳解PHP函式
- Django的檢視和模板Django
- Django - 探究FBV 檢視Django
- postgresql中怎麼檢視函式SQL函式
- sql server檢視函式定義SQLServer函式
- Django教程(一) Django檢視與網址Django
- Django初級手冊3-檢視層與URL配置Django
- python檢視模組下的函式Python函式
- Django(27)Django類檢視新增裝飾器Django
- MySQL資料庫檢視:檢視定義、建立檢視、修改檢視MySql資料庫
- Django基礎之三(類檢視)Django
- Django(58)viewsets檢視集詳解DjangoView
- django rest framework 檢視原始碼解析DjangoRESTFramework原始碼
- Django REST framework API 指南(3):檢視DjangoRESTFrameworkAPI
- django入門-檢視-part3Django
- Django教程(二)- Django檢視與網址進階Django
- 11 UML中的邏輯檢視、程序檢視、實現檢視、部署檢視
- Python檢視模組(變數、函式、類)方法Python變數函式
- 微信小程式 -- 檢視層的用法微信小程式
- 04-drf檢視層詳細
- sysconf()函式應用舉例:檢視CPU及記憶體資訊函式記憶體
- Django REST framework API 指南(5):檢視集DjangoRESTFrameworkAPI
- django模板怎麼配置檢視和urlDjango
- Django基礎三之路由、檢視、模板Django路由