一、RESTful设计风格
基础概念
全称:Representational State Transfer
1.资源
网络上的一个实体,每个资源都有一个独一无二的URL与之对应;获取资源-直接访问URL即可
2.表现层
资源的表现形式 如HTML、xml、JPG、json等
3.状态转化
访问一个URL即发生一次客户端和服务端得交互;此次交互将会涉及到数据和状态得变化
客户端需要通过某些方式接触具体得变化 如GET、POST、PUT、PATCH、DELETE
设计原则
1.协议 - http/https
2.域名
域名中体现出api字样
https://api.example.com/v1 或 https://example.org/api/.
3.版本
https://api.example.com/v1
4.路径
路径中避免使用动词,资源用名词表示
5.HTTP动词语义
GET、POST、PUT、PATCH、DELETE
示例
6.巧用查询字符串
7.状态码
1)用HTTP响应码表达
2)自定义内部code进行响应
{’code‘:'00000','msg':'success','data':{}}
二、用户系统 - ORM
model
class UserProfile(models.Model):username=models.BigAutoField(verbose_name="用户名",primary_key=True)nickname=models.CharField(max_length=20,verbose_name="昵称")password=models.CharField(max_length=32)email = models.EmailField()phone=models.CharField(max_length=11)avatar=models.ImageField(upload_to='avatar',null=True)sign=models.CharField(max_length=50,verbose_name="个人签名",default=default_sign)info=models.CharField(max_length=150,verbose_name="个人简介",default='')created_time=models.DateTimeField(auto_now_add=True)updated_time=models.DateTimeField(auto_now=True)class Meta:db_table = 'user_user_profile'
三、用户系统-注册
只处理后端
from models import UserProfile
import hashlib
# 数据校验 前后端都要做
class UserViews(APIView):def post(self,request):username = request.data['user']nickname = request.data['nick']email = request.data['email']password_1 = request.data['password_1']password_2 = request.data['password_2']phone = request.data['phone']# 参数基本检查if password_1 != password_2:return Response("密码不一致")# 用户名可不可用old_users = UserProfile.objects.filter(username=username)if old_users:return Response("用户名已被使用")# 插入数据(MD5)p_m = hashlib.md5()p_m.update(password_1.encode())UserProfile.objects.create(username=username,nickname=username,password=p_m.hexdigest(),email=email,phone=phone)return Response("注册成功")
四、用户系统-登录
views
class LoginViews(APIView):def post(self,request):username = request.data['user']password = request.data['psd']user_info = UserProfile.objects.filter(username=username)if not user_info:return Response("用户不存在")p_m = hashlib.md5()p_m.update(password.encode())if p_m.hexdigest() != user_info.first().password:return Response("密码不正确")return Response("登录成功")