Django视图是Django M V T结构的重要参与者之一。视图是用户界面,即您呈现网站时在浏览器中看到的内容。它由HTML / CSS / Javascript和Jinja文件表示。根据Django文档,视图函数是一个Python函数,它接受Web请求并返回Web响应。此响应可以是网页的HTML内容,重定向,404错误,XML文档或图像(Web浏览器可以显示的任何内容)
使用示例说明如何创建和使用Django视图。考虑一个名为的项目,其中geeksforgeeks
有一个名为的应用geeks
之后,你有一个项目,准备好了,我们可以创建一个视图geeks/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的日期时间库
接下来,我们定义一个名为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/,
要检查如何使用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(创建,检索,更新,删除)基于功能的视图:-
基于类的视图提供了一种将视图实现为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 /