前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Django 教程 --- Django中的视图

Django 教程 --- Django中的视图

作者头像
公众号---人生代码
发布2020-05-26 15:17:48
发布2020-05-26 15:17:48
3K00
代码可运行
举报
文章被收录于专栏:人生代码人生代码
运行总次数:0
代码可运行

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

Django查看范例

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

之后,你有一个项目,准备好了,我们可以创建一个视图geeks/views.py,

代码语言:javascript
代码运行次数:0
运行
复制
# 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

代码语言:javascript
代码运行次数:0
运行
复制
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

代码语言:javascript
代码运行次数:0
运行
复制
# 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

创建此模型后,我们需要运行两个命令以便为同一数据库创建数据库。

代码语言:javascript
代码运行次数:0
运行
复制
Python manage.py makemigrations
Python manage.py migrate

现在,让我们使用Shell创建该模型的一些实例,运行bash形式,

代码语言:javascript
代码运行次数:0
运行
复制
Python manage.py shell

输入以下命令

代码语言:javascript
代码运行次数:0
运行
复制
>>> 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

代码语言:javascript
代码运行次数:0
运行
复制
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

代码语言:javascript
代码运行次数:0
运行
复制
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

代码语言:javascript
代码运行次数:0
运行
复制
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

代码语言:javascript
代码运行次数:0
运行
复制
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中,

代码语言:javascript
代码运行次数:0
运行
复制
from django.urls import path
  
# importing views from views..py
from .views import GeeksList
urlpatterns = [
    path('', GeeksList.as_view()),
]

在中创建模板templates/geeks/geeksmodel_list.html

代码语言:javascript
代码运行次数:0
运行
复制
<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 /

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CryptoCode 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Django查看范例
  • 视图类型
  • 基于功能的视图
    • 基于功能的视图示例–
  • 基于类的视图
    • 基于类的视图示例–
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档