- 安装
pip install djangorestframework
- 内容
-
1.认证
1.1 有些API需要用户登录认证后才能访问,有些不需要# model.py 创建表 from django.db import models class UserInfo(models.model): user_type_choices = ( (1, '普通用户', 2, 'VIP用户', 3, 'SVIP用户', ) user_type = models.IntegerField(choices=user_type_choices) username = models.CharField(max_length=32, unique=True) password = models.CharField(max_length=32) class UserToken(models.Model): user = models.OneToOneFiled(to='UserInfo') token = models.CharField(max_length=64)
1.2 迁移到数据库:
python manage.py makemigrations
、python manage.py migrate
1.3 URL路径# 项目目录下url from django.config.urls import url from django.contrib import admin from api import views urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^api/v1/auth/$', views.AuthView.as_view()), url(r'^api/v1/order/$', views.OrderView.as_view()), ]
1.4 视图CBV,登录,登录认证
from rest_framework.views import APIview from django.http import JsonResponse from api import modles from rest_framework import exceptions from rest_framework.authentication import BasicAuthentication # 生成随机字符串 def md5(user): import hashlib import time ctime = str(time.time()) m = hashlib.md5(bytes(user, encoding='utf-8')) m.update(bytes(ctime, encoding='utf-8')) return m.hexdigest() ORDER_DICT = { 1:{ 'name': 'xxx', 'age': 18, }, 2:{ 'name': zzzz', 'age': 19, } } # 实现认证的类 class Authtication(object): def authenticate(self, request): request._request.GET.get('token') token_obj = models.UserToken.objects.filter(token=token).first() if not token_obj: raise exceptions.AuthenticationFailed('用户认证失败') # 在 reset framework内部将这两个字段赋值给了request。以供后续操作使用 return (token_obj.user, token_obj) def authenticate_header(self, request): pass class AuthView(APIView): """ 用户登录 """ def post(self, request, *args, **kwargs): ret = {'code': 1000, 'msg': None} try: user = request._request.POST.get('username') pwd = request._request.POST.get('password') obj = models.UserInfo.objects.filter(username=user, password=pwd).first() if not obj: ret['code'] = 1001 ret['msg'] = '用户名或密码不正确' # 为登录用户创建token token = md5(user) # 没有token就创建,有就更新 models.UserToken.objects.update_or_create(user=obj, defaults={'token': token}) ret['token'] = token except Exception as e: ret['code'] = 1002 ret['msg'] = '请求异常' return JsonResponse(ret) class OrderView(APIView): """ 订单处理相关业务 """ # 使用认证 authentication_classes = [Authtication, ] def get(self, request, *args, **kwargs): ret = {'code': 1000, 'msg': None, 'data': None} try: ret['data'] = ORDER_DICT except Exception as e: pass return JsonResponse(ret)
全局认证配置:
在
settings.url
中添加,可配置未登录用命名及认证规则,未登录TOKEN
REST_FRAMEWORK = {"DEFAULT_AUTHENTICATION_CLASSES":['api.utils.auth.Authentication', ], 'UNAUTHENTICATED_USER': lambda : "游客", ''UNAUTHENTICATED_TOKEN': None, }
所有认证类在utils文件夹下,auth.py中,局部不需要使用认证可添加authentication_classes = []
内置认证类
1.认证类必须继承:from rest_framework.authentication import BaseAuthentication
实现authenticate
方法,返回值有3个,None:让下一个认证来处理,若抛异常,raise exceptions.AuthenticationFailed('用户认证失败')
,去from rest_framework import exceptions
导入。(元素1,元素2):元素1赋值给request.user
,元素2赋值给request.auth
2.其他认证类:BasicAuthentication
-
2.权限
2.1
-
3.节流(访问频率控制)
3.1
3.2 基本使用
3.3 局部使用
3.4 全局使用 -
4.版本
4.1 数据库表
版本可以在URL中通过GET传参
视图函数中使用:
全局配置:
总结: -
5.解析器
-
6.序列化
-
QuerySet进行序列化
-
请求数据进行校验
-
QuerySet进行序列化
分页
路由
视图
渲染器
-
Django rest framework 框架2
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 笔记 RESTful架构风格概述 RESTful架构风格 RESTful架构风格最初由Roy T. Fieldin...
- 当我们通过django框架创建RESTful API对外提供后,我们希望这些API只有相关权限的人才可以调用,这个...
- 前言 本文标题为实战,那么希望你已经搭建好了环境。如果没有,请参考官方文档进行环境搭建: 官方教程 通过学习这个例...
- Requests请求 If you're doing REST-based web service stuff ....