python全栈开发基础知识学习——Django框架(二)

在这里插入图片描述

本博文主要了解的是MTV模型中的View(视图),主要负责业务逻辑,并在适当的时候调用Model和Template。

请求和响应对象

Django使用请求和响应对象来通过系统传递状态。

当请求页面时,Django创建一个HttpRequest包含有关请求的元数据的对象。然后Django加载适当的视图,将HttpRequest第一个参数传递给view函数。每个视图都负责返回一个HttpResponse对象。

本文介绍了 模块中定义的API HttpRequest和 HttpResponse对象django.http。


HttpRequest对象

属性描述
HttpRequest.scheme表示请求方案(http或https 通常)的字符串。
HttpRequest.body原始HTTP请求主体作为字节串,例: b’name=jie&sex=man’,它能够获取表单数据
HttpRequest.path表示所请求页面的完整路径的字符串,不包括方案或域。例:/register/
HttpRequest. get_full_path()表示所请求页面的完整路径的字符串,包括get方法取得的表单数据
HttpRequest.method表示请求中使用的HTTP方法的字符串。其返回值是大写的
HttpRequest.encoding表示用于解码表单提交数据的当前编码的字符串(或者None)您可以写入此属性以更改访问表单数据时使用的编码。任何后续属性访问(例如从GET或读取POST)都将使用新encoding值。如果您知道表单数据不在DEFAULT_CHARSET 编码中,则非常有用。
HttpRequest.GET类似字典的对象,包含所有给定的HTTP GET参数。
HttpRequest.POST类似字典的对象,包含所有给定的HTTP POST参数,前提是请求包含表单数据。如果您需要访问请求中发布的原始或非表单数据,请通过该HttpRequest.body属性访问该数据 。服务器收到空的POST请求的情况也是可能发生的,也就是说,表单form通过HTTP POST方法提交请求,但是表单中可能没有数据,因此不能使用 if req.POST来判断是否使用了HTTP POST 方法;应该使用 if req.method=="POST"
HttpRequest.COOKIES包含所有cookie的字典。键和值是字符串。
HttpRequest.FILES包含所有上传文件的类字典对象;FILES中的每一个Key都是标签中 name属性的值,FILES中的每一个value同时也是一个标准的python字典对象,包含下面三个Keys:1. filename: 上传文件名,用字符串表示;2.content_type: 上传文件的Content Type;3. 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支持时该属性才可用。
HttpRequest.headers一个不区分大小写的类似dict的对象,它提供对请求中所有HTTP加前缀的标题(加号Content-Length和Content-Type)的访问。

HttpResponse对象

对于HttpRequest对象来说,是由django自动创建的,但是,HttpResponse对象就必须我们自己创建。每个view请求处理方法必须返回一个HttpResponse对象。

HttpResponse类在django.http.HttpResponse

在HttpResponse对象上扩展的常用方法:

方法描述
render()以及render_to_response()页面渲染
redirect(“路径”)页面跳转
locals()可以直接将函数中所有的变量传给模板

render和redirect的区别:
render 返回页面内容(渲染变量到模板中),并且没有发送第二次请求,不会修改URL的地址。
redirect 发送了第二次请求,是个跳转函数,而且会返回302的状态码。

模板对象调用render方法,将context对象加载渲染到template模板对象中,得到的结果是一个HTML文档。

-----------------------------------url.py

 url(r"login",   views.login),
 url(r"jie_back",   views.jie_back),

-----------------------------------views.py
def login(req):
    if req.method=="POST":
        if 1:
	        name="jie"
	        
            # return redirect("/jie_back/")
            return render(req,"my backend.html",locals())

    return render(req,"login.html",locals())


def jie_back(req):

    name="杰"

    return render(req,"my backend.html",locals())

-----------------------------------login.html

<form action="/login/" method="post">
    <p>姓名<input type="text" name="username"></p>
    <p>性别<input type="text" name="sex"></p>
    <p>邮箱<input type="text" name="email"></p>
    <p><input type="submit" value="submit"></p>
</form>
-----------------------------------my backend.html
<h1>用户{{ name }}你好</h1>

这个示例中,我们要测试 return redirect("/jie_back/")return render(req,"my backend.html",locals())
的区别,url是否发生了变化.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值