django-restframework文档接口及jwt验证(2)

django-restframework文档接口及jwt验证

  • 测试接口设计
  • 代码测试

测试接口设计

前面已经讲了登录的验证机制,需要在headers中加上{ ‘Authorization’: 'Bearer ’ + jwt }才能访问。但是普通的django视图方法不会走JWT的验证机制,新建serializers.py,对模型进行序列化:

from rest_framework import serializers
from users.models import Roles, Users

class RolesSerializer(serializers.ModelSerializer):
    class Meta:
        model = Roles
        fields = '__all__'  # 可操作字段, __all__ 表示所有字段

# 在ModelSerializer中可重写对模型操作的方法
class UsersSerializer(serializers.ModelSerializer):
    class Meta:
        model = Users
        fields = '__all__'

    def create(self, validated_data):  # 重写创建users模型的方法,对密码进行加密
        validated_data['password'] = make_password(validated_data['password'], None, 'pbkdf2_sha256')
        return Users.objects.create(**validated_data)

    def update(self, instance, validated_data):  # 更新
        instance.password = make_password(validated_data.get('password', instance.password), None, 'pbkdf2_sha256')
        instance.save()
        return instance

users中views.py:

from rest_framework.decorators import api_view
from django.http import JsonResponse
from users.models import Roles
from users.serializers import RolesSerializer

# 测试接口 使用api_view装饰器,GET方法访问
@api_view(['GET'])
def roles(request):
    """
    :param request: 请求对象
    :return: 角色数据
    """
    role = Roles.objects.all()
    serializer = RolesSerializer(role, many=True)
    return Response(serializer.data)

新建对应的url路由:

from users import views

urlpatterns = [
	url(r'^roles', views.roles, name="roles"),  # 测试
]

访问地址 http://127.0.0.1:8000/roles 如下图:
django-restframework文档接口及jwt验证(2)_第1张图片
django-restframework文档接口及jwt验证(2)_第2张图片

代码测试

上面是restframework界面显示的,下面我们使用requests模拟访问:

import requests
import json


def login():
    data = {
        'username': 'xjm',
        'password': 'weiqiwater'
    }
    resp = requests.post("http://127.0.0.1:8000/userController/login/", data=data)
    token = json.loads(resp.text)
    return token

def roles(token):
    headers = {
       'Authorization': 'Bearer %s' % token
    }
    resp = requests.get("http://127.0.0.1:8000/roles/", headers=headers)
    response = json.loads(resp.text)
    return response

if __name__ == '__main__':
    resp = login()
    print(resp)
    print(roles(resp['data']['jwt']))

第一步:登录用户,获取到服务器返回用户的jwt,
第二步:访问之前写的测试接口,地址 http://127.0.0.1:8000/roles:
获取正确的jwt,测试如下:
在这里插入图片描述
随便输入一个jwt,测试如下:

if __name__ == '__main__':
    print(roles('123'))

django-restframework文档接口及jwt验证(2)_第3张图片

你可能感兴趣的:(django-restframework文档接口及jwt验证(2))