登录
urls.py
url(r'^login/$', views.LoginView.as_view(),name="login"),
view.py
class LoginView(APIView): authentication_classes = [] def post(self,request): name=request.data.get("name") pwd=request.data.get("pwd") user=User.objects.filter(name=name,pwd=pwd).first() res = {"state_code": 1000, "msg": None} if user: random_str=get_random_str(user.name) token=Token.objects.update_or_create(user=user,defaults={"token":random_str}) res["token"]=random_str else: res["state_code"]=1001 #错误状态码 res["msg"] = "用户名或者密码错误" import json return Response(json.dumps(res,ensure_ascii=False))
认证
局部认证
全局认证
权限
视图
- 帮助开发者提供了一些类,并在类中提供了多个方法以供我们使用。
路由
- 可以通过as_view传参数,根据请求方式不同执行相应的方法
- 可以在url中设置一个结尾,类似于: .json
解析器
- 根据ContentType请求头,选择不同解析器对 请求体中的数据进行解析。
POST /index/ http1.1.
host:11.11.11.11
Content-Type:url-formendo....
user=alex&age=123
POST /index/ http1.1.
host:11.11.11.11
Content-Type:application/json
{....}
分页
根据页码
http://www.example.com/api/v1/student/?page=1&size=10
根据索引
http://www.example.com/api/v1/student/?offset=60&limit=10
根据加密
http://www.exmple.com/api/v1/student/?page=erd8
分页思考:
页码越大速度越慢,为什么以及如何解决?
原因:页码越大向后需要扫描的行数越多,因为每次都是从0开始扫描。
解决:
- 限制显示的页数
- 记录当前页数据ID最大值和最小值,再次分页时,根据ID现行筛选,然后再分页。