Django视图
一、请求对象和响应对象
1.1、请求对象
视图即Django项目中每个应用中的views.py文件,其中就是处理不同业务逻辑的函数或者类,不管是函数还是类它们在处理每个请求的过程中都一定会涉及到请求对象和响应对象。
Django的请求对象是WSGIRequest类实例化的对象,并且WSGIRequest类继承了HttpRequest类。这个对象中包含一次请求所有相关数据,是视图中最重要的部分,我们一般将它作为每个视图函数的第一个参数,并统称为request,其中常用的属性如下:
''' path: 请求页面的全路径,不包括域名 method: 请求中使用的HTTP方法的字符串表示。全大写表示。例如 if req.method=="GET": do_something() elif req.method=="POST": do_something_else() GET: 包含所有HTTP GET参数的类字典对象 POST: 包含所有HTTP POST参数的类字典对象 COOKIES: 包含所有cookies的标准Python字典对象;keys和values都是字符串。 FILES: 包含所有上传文件的类字典对象;FILES中的每一个Key都是<input type="file" name="" />标签中 name属性的值,FILES中的每一个value同时也是一个标准的python字典对象,包含下面三个Keys: filename: 上传文件名,用字符串表示 content_type: 上传文件的Content Type content: 上传文件的原始内容 user: 是一个django.contrib.auth.models.User对象,代表当前登陆的用户。如果访问用户当前 没有登陆,user将被初始化为django.contrib.auth.models.AnonymousUser的实例。你 可以通过user的is_authenticated()方法来辨别用户是否登陆: if req.user.is_authenticated();只有激活Django中的AuthenticationMiddleware 时该属性才可用 session: 唯一可读写的属性,代表当前会话的字典对象;自己有激活Django中的session支持时该属性才可用。 '''
此外还有两个比较常用的方法,request.get_full_path()用于获取URL域名之后的所有部分,request.POST.getlist()当一个键对应的值有多个时用该方法获取所有的值。
1.2、响应对象
Django生成响应对象常用的两个函数是render函数和redirect函数,这两个函数内部都会调用HttpResponse类生成响应对象返回给浏览器。
render函数:直接将一个经过渲染的模板返回给浏览器,其使用的格式为render(request, template_name, context=None, content_type=None, status=None, using=None)
参数说明:
request:请求对象
template_name:使用的模板的文件名
context:一个上下文字典,key为模板中的变量,value为视图函数中的变量
content_type:生成的文档要使用的MIME类型。默认为DEFAULT_CONTENT_TYPE 设置的值。
status:响应的状态码
redirect函数:用于链接跳转的函数,参数可以是很多种。
传递一个对象,将调用get_absolute_url() 方法来获取重定向的URL:
from django.shortcuts import redirect def my_view(request): ... object = MyModel.objects.get(...) return redirect(object)
传递一个视图的别名,可以带有位置参数和关键字参数;将使用reverse() 方法反向解析URL:
def my_view(request): ... return redirect('some-view-name', foo='bar') #别名之外的参数用于路径匹配
传递一个路径或完整URL:
#传递路径,多用于应用间的重定向 def my_view(request): ... return redirect('/some/url/') #传递URL def my_view(request): ... return redirect('http://example.com/')
以上所有方法支持传递permanent 参数,当设置为True时,返回一个永久的重定向:
def my_view(request): ... object = MyModel.objects.get(...) return redirect(object, permanent=True)

浙公网安备 33010602011771号