简单来说这个框架是基于django的,可以帮助我们快速的开发符合RESTful规范的接口框架。是使用django开发前后端分离的框架,
如果你英文水平比较好可以看rest_framework框架官网像博主这个英文渣渣就算了,
博主的版本信息:
python=3.6.8
django=2.1.7
djangorestframework=3.9.2
在settings里面的INSTALLED_APPS中添加‘rest_framework’
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app1.apps.App1Config',
'xadmin',
'crispy_forms',
'rest_framework', # 配置restframework
]
这里就不多说了,大家既然都使用restframework框架了,这个就不在话下了,
urlpatterns = [
path('register/',Register.as_view()),
path('login/',Login.as_view()),
]
这个是为了测试框架随便建的数据库,在实用性上不好,但是可以很好的体现restframework框架的应用,就不要在意这些细节了,嘻嘻,
from django.db import models
# Create your models here.
# 用户
class User(models.Model):
ADMIN_CHOICES = ((0,'管理员'),(1,'普通用户'))
username = models.CharField(max_length=255,verbose_name='用户名',unique=True)
password = models.CharField(max_length=255,verbose_name='用户密码')
is_admin = models.BooleanField(verbose_name='是管理员',choices=ADMIN_CHOICES,default=1)
is_delete = models.BooleanField(verbose_name='逻辑删除',default=0)
class Meta:
verbose_name = '账号信息'
verbose_name_plural = '账号信息管理'
def __str__(self):
return self.username
# 用户信息
class UserInfo(models.Model):
user = models.OneToOneField(to='User',verbose_name='用户',on_delete=models.CASCADE)
company = models.ForeignKey(to='Company',verbose_name='公司',on_delete=models.DO_NOTHING)
department = models.CharField(max_length=255,verbose_name='部门',default='')
real_name = models.CharField(max_length=255,verbose_name='真实姓名',default='')
phone = models.CharField(max_length=50,verbose_name='手机号')
email = models.CharField(max_length=100,verbose_name='邮箱')
class Meta:
verbose_name = '用户信息'
verbose_name_plural = '用户信息管理'
def __str__(self):
return self.user.username
# 用户登录记录
class UserLoginLog(models.Model):
user = models.ForeignKey(to='User',verbose_name='用户',on_delete=models.CASCADE)
ip = models.CharField(max_length=128,verbose_name='登录IP地址')
data_time = models.DateTimeField(auto_now=True,verbose_name='登录时间')
class Meta:
verbose_name = '用户登录日志'
verbose_name_plural = '登录日志管理'
def __str__(self):
return self.user.username
# 公司
class Company(models.Model):
company_name = models.CharField(max_length=255,verbose_name='公司名称')
address = models.CharField(max_length=255,verbose_name='公司地址',default='')
phone = models.CharField(max_length=50,verbose_name='公司电话',default='')
class Meta:
verbose_name = '公司'
verbose_name_plural = '公司管理'
def __str__(self):
return self.company_name
因为是测试,所以密码就没有加密存储,
这里面继承的是APIView,我发现有篇文章说的比我清楚,所以在这里就不做解释了,直接给你连接
Django通用视图APIView和视图集ViewSet的介绍和使用
from rest_framework import serializers
from rest_framework.response import Response
from rest_framework.views import APIView
from app1.models import *
from . import serializers
class Register(APIView):
# 注册
def post(self,request):
# 继承的是APIview,重写了django的view方法,所以使用request.data
username = request.data.get('username')
password = request.data.get('password')
is_admin = request.data.get('is_admin','1') # 0 管理员 1 普通用户
if username and password:
if not User.objects.filter(username=username).exists():
User.objects.create(username=username,password=password,is_admin=is_admin)
return Response({'code':200,'msg':'注册成功'})
else:
return Response({'code':401,'msg':'用户名已存在'})
else:
return Response({'code':400,'msg':'参数错误'})
from rest_framework import serializers
from rest_framework.response import Response
from rest_framework.views import APIView
from app1.models import *
from . import serializers
class Login(APIView):
# 登录
def post(self,request):
# 继承的是APIview,重写了django的view方法,所以使用request.data
username = request.data.get('username')
password = request.data.get('password')
if username and password:
user = User.objects.filter(username=username,password=password)
if user.exists():
# 登录记录 ,获取登录ip
ip = request.META.get('REMOTE_ADDR')
UserLoginLog.objects.create(user=user.first(),ip=ip)
logs = UserLoginLog.objects.filter(user=user.first()).order_by('-data_time')[:5]
userinfo = UserInfo.objects.filter(user=user.first())
# 重要操作,进行序列化,需要在app里面新建一个文件serializers.py,在里面进行序列化操作
# 这个文件内容在下面
logs_user = serializers.UserLoginLogSerializer(logs,many=True).data
info_user = serializers.UserInfoSerializer(userinfo,many=True)
return Response({'code': 200, 'msg': '登录成功','info':info_user.data,'logs':logs_user})
else:
return Response({'code': 401,'msg':'用户名或密码错误'})
在你的APP里面创建一个serializers.py文件
from app1.models import *
from rest_framework import serializers
# 用户信息序列化类
class UserInfoSerializer(serializers.ModelSerializer):
class Meta:
# 要进行序列化的model
model = UserInfo
# 序列化的字段,这里面的字段必须是models里买呢UserInfo里面的字段,其中user和company是外键
fields = ['user','company','department','real_name','phone','email']
# 这里是user和company在models里面是外键,所以要再次进行操作
user = serializers.SerializerMethodField()
company = serializers.SerializerMethodField()
def get_user(self,obj):
# 这里是对user外键进行的操作,里面数据是User表中的字段
return {'username':obj.user.username,'password':obj.user.password,}
def get_company(self,obj):
# 这里是对company外键进行的操作,里面数据是Company表中的字段
return {'company_name':obj.company.company_name,'address':obj.company.address,'phone':obj.company.phone}
# 登录记录序列化类
class UserLoginLogSerializer(serializers.ModelSerializer):
class Meta:
'''
这个表里面没有外键,就只需要把字段列出来就行,
'''
model = UserLoginLog
fields = ['id','ip','data_time']
如果你想要多序列化里面的数据进行修饰操作,举个例子,如下:
就以’’登录记录序列化操作‘‘为例
# 登录记录序列化类
class UserLoginLogSerializer(serializers.ModelSerializer):
class Meta:
'''
这个表里面没有外键,就只需要把字段列出来就行,
'''
model = UserLoginLog
fields = ['id','ip','data_time']
# fields = ['id','ip','time']
'''
以下内容就是这里对data_time字段内容进行的修饰操作,和对外键的操作基本相同,
当然也可以更改表中字段的名称,注释掉的就是,
'''
data_time= serializers.SerializerMethodField()
# time= serializers.SerializerMethodField()
def get_data_time(self,obj):
# def get_time(self,obj):
return str(obj.date_time.date()) + "--" + str(obj.date_time.time())
好吧,就写那么多吧,我也是刚接触这个框架,如有错误或者不足之处,还请指教,