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

Django框架(二)

    • 请求和响应对象
      • HttpRequest对象
      • HttpResponse对象

python全栈开发基础知识学习——Django框架(二)_第1张图片

本博文主要了解的是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

姓名

性别

邮箱

-----------------------------------my backend.html

用户{{ name }}你好

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

你可能感兴趣的:(python全栈开发基础知识学习——Django框架(二))