3.视图函数

1:HttpRequest 对象

1.1 request 属性

django 将请求报文中的请求行,首部信息,内容主体封装成 HttpRequest 类中的属性. 除了特殊说明的之外,其他均为只读的。

属性名含义结果集类型
request.GETHTTP GET 的所有参数QueryDict
request.POST表单数据象QueryDict

注意:

1.POST 请求可以发送空的表单数据,QueryDict 对象依然会被创建,不应该使用 if request.POST 来检查使用的是否是POST 方法,应该使用 if request.method == “POST”

2.如果使用 POST 上传文件的话,文件信息将包含在 FILES 属性中

3.键值对的值是多个的时候,比如checkbox类型的input标签,select标签,需要用request.POST.getlist(“hobby”)

属性名含义结果集类型
request.body请求报文的主体,适合处理非HTTP形式的报文,例如:二进制图片,XML,Json等str
request.path表示请求的路径组件(不含域名)例如:"/music/bands/the_beatles/"str
request.method请求使用的HTTP 方法,必须使用大写.例如:“GET”,“POST”str
request.encoding表示提交的数据的编码方式(如果为 None 则表示使用 DEFAULT_CHARSET 的设置,默认为 ‘utf-8’)str
request.META包含所有的HTTP 首部dict

常见的头部信息

名称含义
CONTENT_LENGTH请求的正文的长度(是一个字符串)
CONTENT_TYPE请求的正文的MIME 类型。
HTTP_ACCEPT响应可接收的Content-Type
HTTP_ACCEPT_ENCODING响应可接收的编码
HTTP_ACCEPT_LANGUAGE响应可接收的语言
HTTP_HOST客服端发送的HTTP Host 头部
HTTP_REFERERReferring 页面
HTTP_USER_AGENT客户端的user-agent 字符串
QUERY_STRING单个字符串形式的查询字符串
REMOTE_ADDR客户端的IP 地址
REMOTE_HOST客户端的主机名
REMOTE_USER服务器认证后的用户
REQUEST_METHOD一个字符串,例如"GET" 或"POST"
SERVER_NAME服务器的主机名
SERVER_PORT服务器的端口

注意

1.除 CONTENT_LENGTH 和 CONTENT_TYPE 之外,请求中的任何 HTTP 首部转换为 META 的键时,都会将所有字母大写并将连接符替换为下划线最后加上 HTTP_ 前缀,例如 X-Bender 的头部将转换成 META 中的 HTTP_X_BENDER 键。

属性名含义结果集类型
request.FILES包含所有的上传文件信息QueryDict

注意

1.FILES 中的每个键为 中的name,值则为对应的数据

2.FILES 只有在请求的方法为POST 且提交的 带有enctype=“multipart/form-data” 的情况下才会包含数据

属性名含义结果集类型
request.COOKIES包含所有的cookie,键和值都为字符串。dict
request.session当Django 启用会话的支持时才可用QueryDict
request.user表示当前登录的用户(只有当Django 启用 AuthenticationMiddleware 中间件时才可用)AUTH_USER_MODEL 类型的对象

注意

1.如果用户当前没有登录,user 将设置为django.contrib.auth.models.AnonymousUser 的一个实例,可以通过 is_authenticated() 区分它们

匿名用户下的属性/方法结果
idNone
username空字符串
get_username()空字符串
is_staffFalse
is_superuserFalse
groups 和 user_permissionsNone
is_anonymous()True
is_authenticated()False
set_password()、check_password()、save() 和delete()引发 NotImplementedError

1.2 request 常用方法

常用方法含义
request.get_full_path()返回 path包括查询字符串,例如:"/music/bands/the_beatles/?print=true"
request.is_ajax()检查 HTTP_X_REQUESTED_WITH 相应的首部是否是字符串’XMLHttpRequest’,否是通过AJAX 发起的

注意:

1.当时用Django 的 cache middleware缓存中间件时,应该使用 vary_on_headers(‘HTTP_X_REQUESTED_WITH’) 装饰视图以让响应能够正确地缓存

2: HttpResponse 对象

响应对象主要有三种形式:

  • HttpResponse()
  • render()
  • redirect()

HttpResponse() 括号内直接跟一个具体的字符串作为响应体,比较直接很简单,所以这里主要介绍后面两种形式

2.1 render()

结合一个给定的模板和一个给定的上下文字典,并返回一个渲染后的 HttpResponse 对象

render(request, template_name[, context]
参数名含义
request用于生成响应的请求对象。
template_name要使用的模板的完整名称,可选的参数
context添加到模板上下文的一个字典。默认是一个空字典。如果字典中的某个值是可调用的,视图将在渲染模板之前调用它

2.2 redirect()

1.重定向原因

重定向原因
网站调整(如改变网页目录结构)
网页被移到一个新地址
网页扩展名改变(如应用需要把.php改成.Html或.shtml)
让访问这些域名的用户自动跳转到主站点

传递要重定向的一个硬编码的 URL

def my_view(request):
    ...
    return redirect('/some/url/')

也可以是一个完整的 URL:

def my_view(request):
    ...
    return redirect('http://example.com/') 

http相应码含义
301表示旧地址A的资源已经被永久地移除了(这个资源不可访问了)
302表示旧地址A的资源还在(仍然可以访问),这个重定向只是临时地从旧地址A跳转到地址B,搜索引擎会抓取新的内容而保存旧的网址. SEO302好于301

注意

1.301和302自动跳转到一个新的URL地址,可以从响应的Location首部中获取

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值