Django視圖是Django M V T結構的重要參與者之一。視圖是用戶界面,即您呈現網站時在瀏覽器中看到的內容。它由HTML / CSS / Javascript和Jinja文件表示。根據Django文檔,視圖函數是一個Python函數,它接受Web請求並返回Web響應。此響應能夠是網頁的HTML內容,重定向,404錯誤,XML文檔或圖像(Web瀏覽器能夠顯示的任何內容)html
使用示例說明如何建立和使用Django視圖。考慮一個名爲的項目,其中geeksforgeeks
有一個名爲的應用geeks
python
以後,你有一個項目,準備好了,咱們能夠建立一個視圖
shellgeeks/views.py
,
# import Http Response from django
from django.http import HttpResponse
# get datetime
import datetime
# create a function
def geeks_view(request):
# fetch date and time
now = datetime.datetime.now()
# convert to string
html = "Time is {}".format(now)
# return response
return HttpResponse(html)
讓咱們一次一步地完成這段代碼:數據庫
首先,咱們從模塊中導入類HttpResponsedjango.http
以及Python的日期時間庫django
接下來,咱們定義一個名爲geeks_view的函數。這是視圖功能。每一個視圖函數都將HttpRequest對象做爲其第一個參數,一般將其命名爲request編程
該視圖返回一個HttpResponse對象,其中包含生成的響應。每一個視圖函數負責返回HttpResponse對象後端
有關HttpRequest和HttpResponse的更多信息,請訪問-Django請求和響應週期- HttpRequest和HttpResponse對象
讓咱們在geeks/urls.py
,瀏覽器
from django.urls import path
# importing views from views..py
from .views import geeks_view
urlpatterns = [
path('', geeks_view),
]
如今,訪問http://127.0.0.1:8000/,
bash
要檢查如何使用Django的MVT(模型,視圖,模板)結構製做基本項目,請訪問建立項目Django。框架
Django視圖分爲兩大類:
基於功能的視圖
基於類的視圖
基於函數的視圖是使用python中的函數編寫的,該函數以HttpRequest對象做爲參數並返回HttpResponse對象。基於功能的視圖一般分爲4種基本策略,即CRUD(建立,檢索,更新,刪除)。CRUD是用於開發的任何框架的基礎。
讓咱們建立一個基於函數的視圖列表視圖以顯示模型的實例。
讓咱們建立一個將經過視圖建立實例的模型。在geeks/models.py
,
# import the standard Django Model
# from built-in library
from django.db import models
# declare a new model with a name "GeeksModel"
class GeeksModel(models.Model):
# fields of the model
title = models.CharField(max_length = 200)
description = models.TextField()
# renames the instances of the model
# with their title name
def __str__(self):
return self.title
建立此模型後,咱們須要運行兩個命令以便爲同一數據庫建立數據庫。
Python manage.py makemigrations
Python manage.py migrate
如今,讓咱們使用Shell建立該模型的一些實例,運行bash形式,
Python manage.py shell
輸入如下命令
>>> from geeks.models import GeeksModel
>>> GeeksModel.objects.create(
title="title1",
description="description1").save()
>>> GeeksModel.objects.create(
title="title2",
description="description2").save()
>>> GeeksModel.objects.create(
title="title2",
description="description2").save()
如今,若是要在管理面板中查看模型及其數據,則須要註冊模型。
讓咱們註冊這個模型。在geeks/admin.py
,
from django.contrib import admin
from .models import GeeksModel
# Register your models here.
admin.site.register(GeeksModel)
如今,咱們已經爲後端作好了一切準備。驗證是否已從
http://localhost:8000/admin/geeks/geeksmodel/
建立了實例
讓咱們爲其建立一個視圖和模板。在geeks/views.py
,
from django.shortcuts import render
# relative import of forms
from .models import GeeksModel
def list_view(request):
# dictionary for initial data with
# field names as keys
context ={}
# add the dictionary during initialization
context["dataset"] = GeeksModel.objects.all()
return render(request, "list_view.html", context)
在中建立模板templates/list_view.html
,
from django.shortcuts import render
<div class="main">
{% for data in dataset %}.
{{ data.title }}<br/>
{{ data.description }}<br/>
<hr/>
{% endfor %}
</div>
讓咱們檢查一下http://localhost:8000/上的內容。
相似地,基於函數的視圖可使用用於建立,更新,檢索和刪除視圖的邏輯來實現。
Django CRUD(建立,檢索,更新,刪除)基於功能的視圖:-
建立視圖–基於函數的視圖Django
細節視圖–基於函數的視圖Django
更新視圖–基於函數的視圖Django
刪除視圖–基於函數的視圖Django
基於類的視圖提供了一種將視圖實現爲Python對象而非函數的替代方法。它們不能替代基於功能的視圖,可是與基於功能的視圖相比具備某些區別和優點:
與特定HTTP方法(GET,POST等)相關的代碼組織能夠經過單獨的方法而不是條件分支來解決。
諸如mixin(多重繼承)之類的面向對象技術可用於將代碼分解爲可重用的組件。
與基於函數的視圖相比,基於類的視圖更易於管理。具備大量代碼行的基於函數的視圖能夠轉換爲僅包含幾行代碼的基於類的視圖。這就是面向對象編程的影響。
在geeks/views.py
,
from django.views.generic.list import ListView
from .models import GeeksModel
class GeeksList(ListView):
# specify the model for list view
model = GeeksModel
如今建立一個URL路徑以映射視圖。在geeks / urls.py中,
from django.urls import path
# importing views from views..py
from .views import GeeksList
urlpatterns = [
path('', GeeksList.as_view()),
]
在中建立模板templates/geeks/geeksmodel_list.html
,
<ul>
<!-- Iterate over object_list -->
{% for object in object_list %}
<!-- Display Objects -->
<li>{{ object.title }}</li>
<li>{{ object.description }}</li>
<hr/>
<!-- If objet_list is empty -->
{% empty %}
<li>No objects yet.</li>
{% endfor %}
</ul>
讓咱們檢查一下基於http:// localhost:8000 /