day_33:后端day04Django框架中的视图和请求、响应

一、django中的视图

1.定义

视图是一个可调用的对象,能够接受用户的请求并返回响应。

一般在视图中编写业务逻辑,约定将视图放在名为`views.py`的文件里,这个文件放置在项目或者应用目录中。

2.函数视图

最简单的视图,就是一个普通的python函数

特点:

1. 逻辑清晰好理解
2. 复用性较差

例子:

3.类视图

基于类的视图相对函数视图又不同的优势

- 与特定的HTTP方法关联组织代码
- 面向对象技术,复用性,可以将代码分解成可重用的组件

类视图例子:

as_view源码分析:

1)

2)as_view中的 view方法解析

 

 

 

二。django中的请求和响应

当页面被请求时,Django会创建一个HttpRequest对象,对象里就包含了请求的元数据。然后加载适当的视图,将HttpRequest对象作为第一个参数传递给视图,每个视图负责返回一个HttpResponse对象。

1.HttpRequest对象

1)常用属性

- .body

原始请求的body,格式时字节类型

- .method

  http请求方法,是大写的

- .GET

  一个类字典对象,包含携带的url参数

- .POST

  一个类字典对象,包含给定的表单格式的post参数

2)请求参数类型

利用http协议向服务器发送参数有几种途径?

a. 查询字符串参数
   - url中 ?后面的key=value形式的参数
   - 通过request.GET属性获取
b. 请求体参数
   - form表单
     - 通过request.POST获取
   - json格式
     - 通过request.body获取
   - 文件
     - 通过request.FILES获取
c. 路径参数
   - 在django中通过路由规则传递给视图

例子:

a.查询字符串参数:

 b.请求体参数

json:

文件:

 

 

2.HttpResponse对象

这个对象是开发者的责任,需要为每个视图负责实例化,填充和返回一个HttpResponse对象。

存在于responsed.py的文件中,该文件定义了很多response的基类

 

1. 传入字符串

   ```python
   response = HttpResponse()
   # 传入字符
   response.write("项目id为{}的详情页\n".format(pid))
   response.write("abcdefg")
   ```

例子:

2. 设置头字段

   ```python
   response.headers['age'] = 120 
   ```

例子:

 

3.JsonResponse对象

1)基本使用

```python
JsonResponse({'code': 1, 'msg': '登录失败'})
```

2)序列化非字典对象(需要加safe=False,不然会报错)

```python
JsonResponse([{'code': 1, 'msg': '登录失败'}], safe=False) # safe不传会报错
```

成功例子:

报错例子:

3)返回非json序列化支持的数据类型,会报错

例子:

原因:

爱折腾的小测试
原文地址:https://www.cnblogs.com/newsss/p/15511881.html