Django中的视图如何使用?开发示例 | Python

2021年3月20日17:19:19 发表评论 1,373 次浏览

本文概述

Django视图是Django MVT结构的重要参与者之一。视图是用户界面——当你渲染一个网站时,你在浏览器中看到的东西。它由HTML/CSS/Javascript和Jinja文件表示。根据Django文档,视图函数是接受Web请求并返回Web响应的Python函数。此响应可以是Web页面的HTML内容、重定向、404错误、XML文档或图像,以及Web浏览器可以显示的任何内容。

django-views

Django查看范例

的插图如何创建和使用Django视图用一个例子。考虑一个名为极客有一个名为极客.

请参阅以下文章, 以检查如何在Django中创建项目和应用。如何在Django中使用MVT创建基本项目?如何在Django中创建应用程序?

准备好项目后, 我们可以在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)

让我们一次一行地浏览此代码:

  • 首先, 我们导入类HttpResponse来自django.http模块, 以及Python的日期时间库。
  • 接下来, 我们定义一个名为geeks_view的函数。这是视图功能。每个视图函数都将HttpRequest对象作为其第一个参数, 通常将其命名为request。
  • 该视图返回一个HttpResponse对象, 该对象包含生成的响应。每个视图函数负责返回一个HttpResponse目的。

有关HttpRequest和HttpResponse的更多信息, 请访问–

Django请求和响应周期– HttpRequest和HttpResponse对象

让这种观点发挥作用

怪胎/ 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-view-example

要检查如何使用Django的MVT(模型, 视图, 模板)结构制作基本项目, 请访问创建一个项目Django.

视图类型

Django视图分为两个主要类别:

  • 基于功能的视图
  • 基于类的视图
django-views-types

基于功能的视图

基于函数的视图使用python中的函数编写器, 该函数以HttpRequest对象作为参数并返回HttpResponse对象。基于功能的视图通常分为4种基本策略, 即CRUD(创建, 检索, 更新, 删除)。 CRUD是用于开发的任何框架的基础。

基于功能的视图示例–

让我们创建一个基于函数的视图列表视图以显示模型的实例。

让我们创建一个模型, 通过我们的视图创建实例。在

怪胎/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()

现在, 如果要在管理面板中查看模型及其数据, 则需要注册模型。

让我们注册这个模型。在

极客/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 /

django-listview-check-models-instances

让我们为其创建一个视图和模板。在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,

< div class = "main" >
  
     {% for data in dataset %}.
  
     {{ data.title }}< br />
     {{ data.description }}< br />
     < hr />
  
     {% endfor %}
  
</ div >

让我们检查一下

http://本地主机:8000 /

基于django-listview-function

类似地, 基于功能的视图可以使用用于创建, 更新, 检索和删除视图的逻辑来实现。

Django CRUD(创建, 检索, 更新, 删除)基于功能的视图:

创建视图–基于函数的视图Django

细节视图–基于函数的视图Django

更新视图–基于函数的视图Django

删除视图–基于函数的视图Django

基于类的视图

基于类的视图提供了一种将视图实现为Python对象而非函数的替代方法。它们不能代替基于功能的视图, 但是与基于功能的视图相比具有某些区别和优点:

  • 与特定的HTTP方法(GET, POST等)相关的代码组织可以通过单独的方法而不是条件分支来解决。
  • 诸如mixin(多重继承)之类的面向对象技术可用于将代码分解为可重用组件。

与基于函数的视图相比, 基于类的视图更易于管理。具有大量代码行的基于函数的视图可以转换为仅包含几行代码的基于类的视图。这就是面向对象编程的影响。

基于类的视图示例–

Ingeeks / 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://本地主机:8000 /

django-listview-class-based-views

Django CRUD(创建, 检索, 更新, 删除)基于类的通用视图:

  • CreateView –基于类的视图Django
  • DetailView –基于类的视图Django
  • UpdateView –基于类的视图Django
  • DeleteView –基于类的视图Django
  • FormView –基于类的视图Django

注意怪胎!巩固你的基础Python编程基础课程和学习基础知识。

首先, 你的面试准备可通过以下方式增强你的数据结构概念:Python DS课程。


木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: