views.py文件详解

1、http请求中产生的两个核心对象

http请求:HttpRequest
http响应: HttpResponse

所在位置: django.http

1、HttpRequest:
HttpRequest对象属性

1.1 path
请求页面的全路径,不包括域名,例如,"/music/bands/the_beatles/""

1.2 method
请求中使用的HTTP方法的字符串表示,全大写表示。例如:
if request.method == ‘GET‘:
do_something()
elif request.method ==‘POST‘:
do_something_else()

1.3 GET
包含所有的HTTP GET参数的类字典。参见QueryDict文档

1.4 POST
包含所有的HTTP GET参数的类字典。参见QueryDict文档
服务器收到空的POST请求的情况也是有可能发生的。也就是说,表单form通过HTTP POST方法提交请求,但是表单中可以没有数据。因此
不能使用语句if request.POST来判断是否有使用HTTP POST方法;应该使用if request.method == "POST"(参见本表method属性)

注意:POST不包括file-upload信息,参见FILES属性

POST提交和GET提交最大区别:
POST提交内容不会显示在浏览器上,即不以URL形式显示在浏览器的地址栏上
GET提交则会完整的显示在浏览器的地址栏上

1.4 REQUEST
为了方便,该属性市POST和GET属性的集合,但是有特殊性,先查找POST属性,然后再查找GET属性。借鉴PHP‘s $_REQUEST.
例如,如果GET = {"name":"john"}和POST = {"age":‘60‘},则REQUEST["name"]的值是"john",REQUEST["age"]的值是"34"
强烈建议使用GET和POST,因为这两个属性更加显示化,写出代码更容易了解。截止到django1.8,REQUEST方法已经废弃了,Django1.9中已经不彻底抛弃了该方法

1.5 COOKIES
包含所有cookies的标准Python字典对象,Keys和values都是字符串,参见第12章,有关cookies更详细的讲解

1.6 FILES
包含所有上传文件的类字典对象,FILES中的每个Key都是<input type="file" name="" />标签中的name属性。
FILES中的每个value同时也是一个标准Python字典对象,包含下面三个Keys:
filename:上传文件名,用Python字符串表示
content-type:上传文件的Content type
content:上传文件的原始内容

注意:只有在请求方法是POST,并且请求页面中<form>有enctype="multipart/form-data" 属性时FILES才拥有数据。否则,FILES时一个空字典

1.7 META
包含所有可用的HTTP头部信息的字典。例如:
CONTENT_LENGTH
CONTENT_TYPE
QUERY_STRING: 未解析的原始查询字符串
REMOTE_ADDR:客户端IP地址
REMOTE_HOST:客户端主机名
SERVER_NAME:服务器主机名
SERVER_PORT:服务器端口

META中这些头加上前缀HTTP_最未Key,例如:
HTTP_ACCEPT_ENCODING
HTTP_ACCEPT_LANGUAGE
HTTP_HOST:客户端发送的HTTP主机头信息
HTTP_REFERER: referring页
HTTP_USER_AGENT:客户端的user-agent字符串
HTTP_X_BENDER:X-Bender头信息

1.8 User
是一个django.contrib.auth.models.User对象,代表当前登录的用户。如果访问用户当前没有登录,user被初始化未
django.contrib.auth.models.AnonymousUser的实例。你可以通过user的is_authenticated()方法拉力辨别用户是否登录:
if request.user.is_authenticated():
# Do something for logged-in users
else:
# Do something for anonymous users.

注意:只有激活Django中年的AuthenticationMiddleware时,该属性才可用

1.9 session
唯一可读写的属性,代表当前会话的字典对象。只有激活Django中的session支持时该属性才可用,
参见官方文档第12章

1.10 raw_post_data
原始的HTTP POST数据,未解析过,高级处理时会有用过

Httprequest对象的方法(部分)

1.11 get_full_path()

返回包含查询字符串的请求路径。例如:
"/music/bands/the_beatles/?pring=true"
这里要跟get_path方法区分开来,这里路径包含参数,get_path方法返回来不包含参数仅仅是省略域名的url路径

QueryDict对象(部分)

1.12 get()

如果key对应多个value,get()返回最后一个value
在HttpRequest对象中,GET和POST属性时django.http.QueryDict类的实例

2、HttpRespouse:
对于HttpRequest对象来说,是由Django自动创建,但是HttpRresponse对象就必须我们自己创建
每个View方法必须返回一个HttpRespouse对象

HttpResponse类在django.http.HttpResponse中

构造HttpRespouse:
>>> response = HttpResponse("Here‘s the text of the Web page.")
>>> response = HttpResponse("Text only,please.",{"mimetype":"text/plain"})

更详细的有关request和response对象的介绍
https://docs.djangoproject.com/en/1.9/ref/request-response/

2、在HttpRespouse对象上扩展的常用方法
render、render_to_response、redirect

response方法:
from django.template import loader
from django.http import HttpRequest,HttpResponse

def hello(request,a):
print(request.get_full_path())
user_list = User.objects.all()
t = loader.get_template(‘table.html‘)
c={‘user_list‘:user_list}
return HttpResponse(t.render(c,request),content_type="text/html") #返回一个response对象,里面又通过模板对象中的render方法来实现渲染

render方法
就是将上述response中的t、c等定义代码简化为一句代码:

def hello(request,a):
print(request.get_full_path())
user_list = User.objects.all()
return render(request,‘table.html‘,{‘user_list‘:user_list})

render_to_response方法:相对于render方法少传递一个request对象

from django.shortcuts import render,render_to_response

def hello(request,a):
print(request.get_full_path())
user_list = User.objects.all()
return render_to_response(‘table.html‘,{‘user_list‘:user_list})

redirect方法
该方法是作为跳转使用,比如上述代码后面跳转到百度:
from django.shortcuts import redirect

def hello(request,a):
print(request.get_full_path())
user_list = User.objects.all()
return redirect("http://www.baidu.com")

更多详见:
https://docs.djangoproject.com/en/1.9/topics/http/shortcuts/

3、其他常用方法
locals():可以直接将函数中所有的变量全部传递给模板,不管是我们自己定义的还是系统定义的变量都会一起传递过去,不用我们自己再去拼接字典,从而达到一个简化的目的

实例代码:

def hello(request,a):
print(request.get_full_path())
user_list = User.objects.all()
print(locals())
return render_to_response(‘table.html‘,locals())

输出结果变量:
/hello/
{‘a‘: ‘123‘, ‘user_list‘: [<User: admin>, <User: test>], ‘request‘: <WSGIRequest: GET ‘/hello/‘>}

原文地址:https://www.cnblogs.com/kindnull/p/8379766.html

时间: 2024-07-31 09:04:08

views.py文件详解的相关文章

初步学习Django-第四篇:views.PY文件详解

http请求中产生的两个核心对象: http请求:HttpRequesthttp响应:HttpResponse 所在位置:from django.http import HttpRequest,HttpResponse 1.HttpRequest:HttpRequest对象的属性: Attribute Description path 请求页面的全路径,不包括域名-例如, "/music/bands/the_beatles/" method 请求中使用的HTTP方法的字符串表示.全大写

url.py文件详解

urls.py:URL分发器(路由配置文件)URL配置(URLconf)就像是Django所支撑网站的目录,它本质是URL模式以及要为该URL模式调用的视图函数治安的映射表.我们就是以这种方式告诉django,对于这个URL调用这段代码,对于那个URL调用那段代码.URL的加载是从配置文件中开始. 1.urlpatterns的两种形式:没有前缀的情况,使用的列表(推荐方式) urlpatters = [ url(r'^hello/$',views.hello)] 有前缀的情况,使用pattern

初步学习Django-第三篇:URLS.PY文件详解

该文章转至博科:https://www.cnblogs.com/luchuangao/p/7113667.html urls.py:URL分发器(路由配置文件)URL配置(URLconf)就像是Django所支撑网站的目录.它的本质是URL模式以及要为该URL模式调用的视图函数之间的映射表.你就是以这种方式告诉Django,对于这个URL调用这段代码,对于那个URL调用那段代码.URL的加载是从配置文件中开始. 1.urlpatterns的两种形式: 没有前缀的情况,使用的列表(推荐方式)url

Linux-apache httd.conf文件详解

Linux-apache httd.conf文件详解 # This is the main Apache server configuration file. It contains the # configuration directives that give the server its instructions. # See <URL:http://httpd.apache.org/docs/2.2/> for detailed information. # In particular

zend framework2 之入口文件详解以及原理解析

zend framework2 之入口文件详解 转载请注明出处,尊重原创:http://blog.csdn.net/a437629292/article/details/41545297,谢谢! 一.基本配置解析 1. 详细配置: 如下代码: <?php // 定义程序目录 defined('APPLICATION_PATH') || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application')); // D

package-info.java文件详解

package-info.java文件详解 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs 一.pacakge-info.java介绍 pacakge-info.java是一个Java文件,可以添加到任何的Java源码包中.pacakge-info.java的目标是提供一个包级的文档说明或者是包级的注释. pacakge-info.java文件中,唯一要求包含的内容是包的声明语句,比如: package com.ch.service; 二.包文档 在

史上最全的maven的pom.xml文件详解

史上最全的maven的pom.xml文件详解 http://www.cnblogs.com/hafiz/p/5360195.html <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 h

POM文件详解(1)

POM文件详解 <project xmlns=http://maven.apache.org/POM/4.0.0 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd "> 1      Parent坐标 <

T-SQL 操作文件 详解

/*******  导出到excel EXEC master..xp_cmdshell 'bcp SettleDB.dbo.shanghu out c:\temp1.xls -c -q -S"GNETDATA/GNETDATA" -U"sa" -P""' /***********  导入Excel SELECT * FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 'Data Source="