Django|Django rest framework 框架2

  • 安装pip install djangorestframework
  • 内容
    • 1.认证
      1.1 有些API需要用户登录认证后才能访问,有些不需要
      # model.py 创建表 from django.db import modelsclass 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 makemigrationspython manage.py migrate
      1.3 URL路径
      # 项目目录下url from django.config.urls import url from django.contrib import admin from api import viewsurlpatterns = [ 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): passclass 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

      Django|Django rest framework 框架2
      文章图片
      图片.png
    • 2.权限


      2.1 Django|Django rest framework 框架2
      文章图片
      图片.png
    • 【Django|Django rest framework 框架2】3.节流(访问频率控制)


      3.1 Django|Django rest framework 框架2
      文章图片
      图片.png
      3.2 基本使用 Django|Django rest framework 框架2
      文章图片
      图片.png

      3.3 局部使用 Django|Django rest framework 框架2
      文章图片
      图片.png
      3.4 全局使用 Django|Django rest framework 框架2
      文章图片
      图片.png
    • 4.版本


      4.1 数据库表 Django|Django rest framework 框架2
      文章图片
      图片.png
      版本可以在URL中通过GET传参 Django|Django rest framework 框架2
      文章图片
      图片.png
      视图函数中使用:

      Django|Django rest framework 框架2
      文章图片
      图片.png

      路由配置: Django|Django rest framework 框架2
      文章图片
      图片.png

      全局配置: Django|Django rest framework 框架2
      文章图片
      图片.png
      总结: Django|Django rest framework 框架2
      文章图片
      图片.png
    • 5.解析器

      Django|Django rest framework 框架2
      文章图片
      图片.png
      Django|Django rest framework 框架2
      文章图片
      图片.png
    • 6.序列化


      • QuerySet进行序列化 Django|Django rest framework 框架2
        文章图片
        图片.png
        Django|Django rest framework 框架2
        文章图片
        图片.png
        Django|Django rest framework 框架2
        文章图片
        图片.png
        Django|Django rest framework 框架2
        文章图片
        图片.png
        Django|Django rest framework 框架2
        文章图片
        图片.png


      • 请求数据进行校验 Django|Django rest framework 框架2
        文章图片
        图片.png
    • 分页
    • 路由
    • 视图
    • 渲染器

    推荐阅读