为了学习这个功能,我在项目下新建了一个叫my_api的APP,用于测试。
APIView是REST framework提供的所有视图的基类,继承自Django的View父类。
APIView与View的不同之处在于:
传入到视图方法中的是REST framework的Request对象,而不是Django的HttpRequeset对象;
视图方法可以返回REST framework的Response对象,视图会为响应数据设置(render)符合前端要求的格式;
任何APIException异常都会被捕获到,并且处理成合适的响应信息;
在进行dispatch()分发前,会对请求进行身份认证、权限检查、流量控制。
支持定义的属性:
authentication_classes 列表或元祖,身份认证类
permissoin_classes 列表或元祖,权限检查类
throttle_classes 列表或元祖,流量控制类
---------------------
准备工作:
新建模型:my_api/models.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,verbose_name='用户级别')
username = models.CharField(max_length=32,verbose_name='用户名字')
password = models.CharField(max_length=64)
class UserToke(models.Model):
'''
用户TOKE
'''
user = models.OneToOneField(to='UserInfo',verbose_name='用户关联',on_delete=models.DO_NOTHING)
token = models.CharField(max_length=64)
注册app,并迁移数据库文件:
(1) 生成迁移脚本文件: python manage.py makemigrations (在CMD里 cd到工程文件下,环境中)
(2) 映射口令: python manage.py migrate (在CMD里 cd到工程文件下,环境中)
给数据表添加一些测试数据

视图的书写:
from rest_framework.views import APIView
from django.http import JsonResponse
from .models import *
#新建一个处理随机字符串的方法,利用用户名和时间戳
def md5(user):
import hashlib #这个库是转换成哈希字符串
import time #时间模块
ctime = str(time.time()) #获取当前时间并转换成字符串
#将用户名转成哈希字符串
m = hashlib.md5(bytes(user,encoding='utf-8'))
#将时间转换成哈希字符串拼接到m上
m.update(bytes(ctime,encoding='utf-8'))
return m.hexdigest()
#利用APIView来做一个用户带着token的登陆请求视图
class Authview(APIView):
#POST方法
def post(self,request,*args,**kwargs):
#正常情况的返回
ret = {'code':200,'msg':None}
try:
#获取POST来的用户名和密码(方法一)
#user = request._request.POST.get('username')
#pwd = request._request.POST.get('password')
# 获取POST来的用户名和密码(方法二)
user = self.request.POST.get('username')
pwd = self.request.POST.get('password')
#去表里查找
obj = UserInfo.objects.filter(username=user,password=pwd).first()
#如果没找到就返回错误
if not obj:
ret['code'] = 400
ret['msg'] = '用户名或密码错误'
#查到就走到这里,生成一个随机TOKEN
token = md5(user)
#如果表里有就更新这个token,没有就创建,用update_or_create方法user为表里的用户关联字段
UserToke.objects.update_or_create(user=obj,defaults={'token':token})
#将token加进去返回给用户
ret['token'] = token
except Exception as e:
ret['code'] = 404
ret['msg'] = '请求异常'
return JsonResponse(ret)
URL:
path('a/', Authview.as_view()),
打开POSTman,进行测试:
目前我们已经成功获取了返回的JSON,并将TOKEN返回给了用户,接下来我我们进行验证,(待续)
登陆后方可评论