Django 教程 --- Django中的视图

Django视图是Django V T结构的重要参与者之一视图是用户界面,即您呈现网站时在浏览器中看到的内容。它由HTML / CSS / Javascript和Jinja文件表示。根据Django文档,视图函数是一个Python函数,它接受Web请求并返回Web响应响应能够是网页的HTML内容,重定向,404错误,XML文档或图像(Web浏览器能够显示的任何内容)html


图片

Django查看范例

使用示例说明如何建立和使用Django视图考虑一个名为的项目,其中geeksforgeeks有一个名为的应用geekspython


以后,你有一个项目,准备好了,咱们能够建立一个视图geeks/views.pyshell

# 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 /

图片

相关文章
相关标签/搜索