1、开发模式:
1、普通开发(前后端一起写)
2、前后端分离
2、后端开发:
为前端提供URL(API/接口开发)
注:永远返回HttpResponse
3、Django
FBV:基于函数的视图
CBV:基于类的视图
基于反射实现根据不同的请求方式,执行不同的方法
原理:
URL —— view方法 —— dispacth方法 ——反射执行其他
代码:
from import View
class MyBaseView:
def dispatch(self, request, *args, **kwargs):
print('before')
ret = super(MyBaseView, self).dispatch(request, *args, **kwargs)
print('after')
class StudentView(MyBaseView, View):
def dispatch(self, request, *args, **kwargs):
print('before')
ret = super(StudentView, self).dispatch(request, *args, **kwargs)
print('after')
return ret
def get(self, request, *args, **kwargs):
return
def post(self, request, *args, **kwargs):
return
def put(self, request, *args, **kwargs):
return
def delete(self, request, *args, **kwargs):
return
return ret
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
面试题:
1、django中间件
process_request 请求执行
process_view 视图函数之前执行
process_response 返回执行
process_exception 报错执行
process_render_template 有render执行
2、使用中间件做过什么?
权限
登录认证
csrf是如何实现的:
去请求体或cookie中获取token
process_view (检查视图是否被@csrf_exempt装饰)
from import csrf_exempt, csrf_protect
@csrf_exempt加上这个装饰器可以不用验证
@csrf_protect加上这个需要csrf验证
特殊:
CBV中加csrf需要from import method_decorator
而且在单独的方法上无效,需要在在dispatch方法上加这样装饰@method_decorator(csrf_exempt)
一、restful规范(建议)
1、根据method不同做不同的操作
2、HTTPs
3、域名写法
子域名的方式:(会存在跨域问题)
URL方式:/api
4、版本:
/api/v1 (版本尽量写在URL)
5、面向资源编程(使用名词)
/api/v1/名词
6、过滤
/api/v1/?status=1&p=1
7、状态码:
200:成功
300:重定向
400:客户端错误
500:服务端错误
详细:
200 OK - [GET]:服务器成功返回用户请求的数据,该操作是幂等的(Idempotent)。
201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功。
202 Accepted - []:表示一个请求已经进入后台排队(异步任务)
204 NO CONTENT - [DELETE]:用户删除数据成功。
400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作,该操作是幂等的。
401 Unauthorized - []:表示用户没有权限(令牌、用户名、密码错误)。
403 Forbidden - [] 表示用户得到授权(与401错误相对),但是访问是被禁止的。
404 NOT FOUND - []:用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的。
406 Not Acceptable - [GET]:用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)。
410 Gone -[GET]:用户请求的资源被永久删除,且不会再得到的。
422 Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误。
500 INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。
8、错误处理
{
error: "Invalid API key"
}
9、返回结果
GET /collection:返回资源对象的列表(数组)
GET /collection/resource:返回单个资源对象
POST /collection:返回新生成的资源对象
PUT /collection/resource:返回完整的资源对象
PATCH /collection/resource:返回完整的资源对象
DELETE /collection/resource:返回一个空文档
10、Hypermedia API
{"link": {
"rel": "collection /zoos",
"href": "/zoos",
"title": "List of zoos",
"type": "application/+json"
}}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
面试题:谈谈你对restful规范的认识。
原来的web程序时,根据URL不同定位到不同视图函数处理。
rest是一种规范:
面向资源编程
URL中是名词
二、Django rest framwork
pip install djangorestframwork