Django View函数的升级之路

本文通过逐步演示,从最简单的视图逻辑开始,逐步引入更复杂的模块和功能,展示了Django视图的创建和演进过程。从基本的HTTP响应到使用模板渲染,再到简化代码的render_to_response函数,详述了Django视图的开发流程。

记录View视图从最简单的逻辑实现出发,慢慢的变为使用更多封装,和更多功能的模块。

本文是根据the django book阅读,再加上自己理解而来。

第一步:简单的输出

from django.http import HttpResponse

def hello(request):
    return HttpResponse("Hello world")

很简单,只是单纯的返回一个http的response就行了。这个函数中用到了什么?他又返回了什么?

使用一个request实例做参数:request包含了很多http请求的信息,他以类似字典的方式取用数据。他必须是试图函数的第一个参数。

返回了一个HttpResponse实例:对我们要返回的内容进行了http的封装。

要使一个函数成为视图函数,需要满足上面这两个条件。但是也不是必须的。

第二步:根据数据返回Response

from django.http import HttpResponse
import datetime

def current_datetime(request):
    now = datetime.datetime.now()
    html = "<html><body>It is now %s.</body></html>" % now  # 构造了一段html的响应
    return HttpResponse(html)

上面这个view函数就将返回纯文字的内容转变成了返回带有html标记的东西了。

那每次都这样手写html标记?肯定是不合适的。

第三步:使用单独的模板文件

def current_datatime(request):
    """展示当前时间"""
    now = datetime.datetime.now()
    fp = open('/home/djangouser/template/mytemplate.html')
    t = template.Template(fp.read())
    fp.close()
    html = t.render(template.Context({'current_date': now}))
    return HttpResponse(html)

使用open打开文件然后再渲染显得有些low,而且这些代码是重复的,可以对它进行封装。

Django当然是提供了相应的API的,但是首先要告诉程序我们的模板放在哪。setting.py中的TEMPLATE_DIRS正是这个功能。TEMPLATE_DIRS接受一个元组。其中存放模板位置的地址。

模板

<html><body>It is now {{ current_date }}.</body></html>

当编写好模板代码,并且设定好路径后,就可以将view函数进行改造了

from django.template.loader import get_template
from django.template import Context
from django.http import HttpResponse
import datetime

def current_datetime(request):
    now = datetime.datetime.now()
    t = get_template('current_datetime.html')
    html = t.render(Context({'current_date': now}))  # 填充,渲染一起完成
    return HttpResponse(html)

get_template返回的是Template对象。我们简化了代码,但是还不够简洁,因为还是分了三步。使用一个函数来完成所有事情是最简单的。

隆重推出 render_to_response

from django.shortcuts import render_to_response
import datetime

def current_datetime(request):
    now = datetime.datetime.now()
    return render_to_response('current_datetime.html', {'current_date': now})

render_to_response第一个参数是模板文件,第二个参数是要渲染的数据。

当然,当然,如果你连字典也不想写,可以这样。

def current_datetime(request):
    current_date = datetime.datetime.now()
    return render_to_response('current_datetime.html', locals())
### 回答1: 在Django中,views函数可以调用其他函数。这些函数可以是在views.py文件中定义的,也可以是在其他文件中定义的。调用函数的方法与普通的Python函数调用相同。例如,可以使用以下代码在views函数中调用另一个函数: ``` def my_view(request): # 调用另一个函数 result = my_function() # 处理结果并返回响应 ... def my_function(): # 执行一些操作并返回结果 ... ``` 在这个例子中,my_view函数调用了my_function函数,并使用返回的结果进行处理。注意,如果调用的函数在另一个文件中定义,需要使用import语句导入该文件。 ### 回答2: Django 是一个使用 Python 语言编写的 Web 框架,它主要用于快速构建高性能的 Web 应用程序。Django 中的视图函数通常包括两大部分:请求处理和响应生成。在大多数情况下,视图函数只负责处理单一的请求,因此很少需要调用其他的视图函数。但在某些特定的场景下,一个视图函数需要调用另一个视图函数,这时候就要用到 Django 中的函数调用函数Django 中的函数调用函数实际上就是将一个函数作为参数传递给另一个函数,从而实现不同视图函数间的调用。在 Django 中,这种方式非常常见,尤其是在类视图中使用较多。具体实现方式如下: 1. 在 views.py 中定义第一个视图函数。 ``` def first_view(request): # 处理请求的具体逻辑 second_view(request) return HttpResponse("Hello, World!") ``` 2. 在 views.py 中定义第二个视图函数。 ``` def second_view(request): # 处理请求的具体逻辑 return HttpResponse("This is the second view.") ``` 3. 在第一个视图函数 first_view 中通过函数调用函数的方式调用第二个视图函数 second_view。 4. 最后返回一个 HttpResponse 对象。 需要注意的是,这种方式并不是特别推荐,因为它可能会导致代码的复杂性增加,特别是在视图需要调用多个其他视图的时候。此外,如果视图之间存在相互依赖的情况,建议将其抽象成一个公共类或函数实现,以便统一管理和调用。 ### 回答3: 在Django中,view函数是处理浏览器请求的函数。当用户请求URL时,view函数接收该请求并生成所需的HTML响应。在某些情况下,您可能想要从一个视图函数调用另一个视图函数。在这种情况下,您可以使用Django中的导入和函数调用机制来实现。 首先,在你的views.py文件中定义所有的视图函数,然后在你的urls.py文件中将它们与特定的URL绑定。这将使您可以在浏览器上访问视图函数。现在,如果你想从一个视图函数调用另一个视图函数,你可以简单地导入另一个视图函数使用它。 例如,假设你有一个视图函数A和另一个视图函数B。现在,当用户访问视图函数A时,您想让它调用视图函数B并返回其响应。为此,您需要导入B函数并将其调用。 ``` from . import views // 从同一个app中导入views模块 def A(request): response1 = HttpResponse("This is View A") response1 += views.B(request) // 访问B的响应 return response1 def B(request): response2 = HttpResponse("This is View B") return response2 ``` 在上面的代码中,当用户访问视图函数A时,该函数会生成一个与该函数相关的响应。然后,在视图函数A中,您导入视图函数B并使用它。您使用上述方法将B视图的返回值添加到A视图的响应中,并最终返回完整的响应。 这是一个简单的例子,您可以使用类似的模式从一个视图函数调用其他视图函数。从一个视图函数调用另一个视图函数Django中的常见模式,并且非常有用。如果您正处于这种情况下,请使用上面的步骤来完成它。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值