Django View视图
Posted houyongchong
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django View视图相关的知识,希望对你有一定的参考价值。
视图
一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应。响应可以是一张网页的html内容,一个重定向,一个404错误,一个XML文档,或者一张图片。
无论视图本身包含什么逻辑,都要返回响应。大家约定成俗将视图放置在项目(project)或应用程序(app)目录中的名为views.py的文件中。
- Django使用请求Request和响应Response来给整个系统传递状态
- 当用户请求一个页面时,Django创建一个包含元数据和请求内容的HttpRequest对象。然后Django加载适当的视图,HttpRequest对象作为视图函数的第一个参数,每个视图负责返回一个HttpResponse对象。
from django.http import HttpResponse def show(req): name = ‘Jerry‘ content = ‘<h1>hello %s!</h1>‘ % name return HttpResponse(content)
首先从 django.http模块导入了HttpResponse类。然后定义了show函数。它就是视图函数;每个视图函数的第一个参数都为request,其实是一个HttpRequest对象。视图函数中封装了一个HTML格式的字符串,传入HttpResponse()后,实例化一个HttpResponse对象并返回。
当浏览器向服务端请求一个页面时,Django创建一个HttpRequest对象,该对象包含关于请求的元数据。然后,Django加载相应的视图,将这个HttpRequest对象作为第一个参数传递给视图函数。
render()
结合一个给定的模板和一个给定的上下文字典, 并返回一个渲染后的HttpResponse对象。
def render(request, template_name, context=None, content_type=None, status=None, using=None): """ Return a HttpResponse whose content is filled with the result of calling django.template.loader.render_to_string() with the passed arguments. """ content = loader.render_to_string(template_name, context, request, using=using) return HttpResponse(content, content_type, status)
必需参数:
- request:用于生成此响应的HttpRequest对象;
- template_name:要使用的模板的完整名称;
可选参数:
- context:添加到模板上下文的一个字典,默认是一个空字典, 通过它可以向模板传入自定义参数,视图将在渲染模板之前调用它;
- content_type:生成的文档要使用的MIME类型.,默认为DEFAULT_CONTENT_TYPE设置的值"text/html";
- status:响应的状态码. 默认为200;
- useing:用于加载模板的模板引擎的名称。
示例:
from django.shortcuts import render def my_view(request): active = True return render(request, ‘index.html‘, ‘name‘: active, content_type=‘application/xhtml+xml‘)
redirect()
默认返回一个临时的重定向,传递permanent=True可以返回一个永久的重定向。临时重定向(响应状态码: 302)和永久重定向(响应状态码: 301)对普通用户来说是没什么区别的, 它主要面向的是搜索引擎的机器人。
def redirect(to, *args, permanent=False, **kwargs): """ Return an HttpResponseRedirect to the appropriate URL for the arguments passed. """ redirect_class = HttpResponsePermanentRedirect if permanent else HttpResponseRedirect return redirect_class(resolve_url(to, *args, **kwargs))
参数可以是:
- 一个模型: 将调用模型的get_absolute_url()函数
- 一个视图, 可以带有函数: 可以使用urlresolvers.reverse来反向解析名称
- 一个绝对的或相对的URL, 将原封不动的作为重定向的位置
示例:
from django.shortcuts import redirect def my_view(request): return redirect(‘/some/url/‘) def my_view(request): return redirect(‘https://example.com/‘)
以上是关于Django View视图的主要内容,如果未能解决你的问题,请参考以下文章