一、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序列化支持的数据类型,会报错
例子:
原因: