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视图的主要内容,如果未能解决你的问题,请参考以下文章

Django初印象之视图(view)

Django之视图(view)

Django视图(View)

Django View视图

Django之View(视图)

Django的View(视图)