Django框架学习心得
本周完成了一些页面bug的修修改改,并且新增一些新的按钮功能。但是最主要的还是学习Python后端的东西,Django框架以及基于Django框架的DRF前后端分离开发框架。这套框架一个是用于构建Web API的强大而又灵活的工具,由Tom Christie大牛二次开发的开源项目。
DRF框架的特点:
1.提供了定义序列化器Serializer的方法,可以快速根据 Django ORM 或者其它库自动序列化/反序列化;
2.提供了丰富的类视图、Mixin扩展类,简化视图的编写;
3.丰富的定制层级:函数视图、类视图、视图集合到自动生成 API,满足各种需要;
4.多种身份认证和权限认证方式的支持;
5.内置了限流系统;
6.直观的 API web 界面;
7.可扩展性,插件丰富
刚开始学习Django框架有些不适应,弄了半天才基本搞懂什么是模型类,视图类和模板类,有些浪费时间,网络上的教程似乎看着没有Java教程那么系统的讲解,Java很多东西都是掰碎了喂到嘴里,而B站相关教学视频的Django框架就是蹦出来一个类的,然后还得看官方文档讲解,没有讲解更加细致一些的东西。比如Django框架为什么是这么构造模型类,视图类和模板类的,他们分别有什么作用,在企业开发中注意的点有哪些。而且Django框架相关视频有一些坑点在于很多视频教的是Django的基础框架,一套模型类、视图类、模板类学下来做出来的东西是前后端不分离的项目,这个在前后端分离时代是被淘汰的。而真正前后端分离的框架则是基于Django框架二次开发的DRF框架,这个才是正解。
而教学视频我一般推荐:python项目开发|Django框架零基础入门到项目实战|Django框架项目实战|DRF前后端分离项目开发| 小程序前后+后端项目开发/毕业设计项目|_哔哩哔哩_bilibili
当然还要搭配一定的Django框架的书籍+DRF官方文档来食用才是最佳。
DRF官方文档地址:Home - Django REST framework
目前只学习到了DRF框架的视图类部分,目前给我的感觉就是越学似乎写的代码量越少,并且基本的接口的增删查改逻辑内部已经封装了,直接调用对应的视图类的库就可以完成基本的接口开发,也就是2-3行代码即可完成。似乎只需要关注MySQL数据库的模型类搭建和基本的settings和路由规则设置即可。反正继续学习吧。
接口开发步骤
1. 创建模型类文件,定义模型类,执行数据迁移命令,在数据库中形成对应的数据表
2. 创建序列化文件,关联模型类,(注意:基本就在序列化文件中操作
3. 创建视图类,定义接口
4. 配置视图类的路由规则
创建模型类
# models.py
from django.db import models
# Create your models here.
# 定义UserInfo模型类
class UserInfo(models.Model):
name=models.CharField(max_length=50,verbose_name="用户名")
# 不设置verbose_name字段显示名称
pwd=models.CharField(max_length=50)
email=models.EmailField(max_length=50,verbose_name="邮箱")
age=models.IntegerField(verbose_name="年龄",default=18)
def __str__(self):
return self.name
class Meta:
# 这里会在数据库的表中创建对应的数据表名称
db_table="用户表userinfo"
verbose_name="用户信息"
序列化
from ModelClass.models import UserInfo
# 定义模型序列化器类
class UserSerializer(serializers.ModelSerializer):
class Meta:
# 指明参造的模型类
model = UserInfo
# 为所有的字段生成序列化
fields="__all__"
# fiels 也可以指定具体需要序列化的字段
# fields=("id","age","pwd")
# 使用exclude 可以明确排除掉哪些字段
# exclude("id") id字段不参与序列化
# read_only_fields 指定哪些参与序列化,并且不粗安于反序列化的字段
# read_only_fields=("id")
# 更改对应字段的校验规则
extra_kwargs = {
"pwd": {"min_length": 5, "max_length": 50,"read_only": True},
}
创建拓展视图类
from rest_framework import status, generics
class AddrListView(generics.ListCreateAPIView,
generics.CreateAPIView,
generics.RetrieveAPIView,
generics.UpdateAPIView,
generics.DestroyAPIView
):
# 设置模型类
queryset=UserInfo.objects.all()
# 指定序列器类
serializer_class=UserInfoSerializer
部分接口案例
# views.py
from django.shortcuts import render
from django.http import JsonResponse
from django.shortcuts import render
from rest_framework.parsers import JSONParser
from .models import *
from .serializers import *
# Create your views here.
# 定义视图接口函数
def responeString(code,msg,data=[1]):
return {"code":code,"msg":msg,"data":data}
def user_list(request):
if request.method=="GET":
# get请求返回所有用户信息
usersInfo=UserInfo.objects.all()
serializer = UserInfoSerializer(usersInfo,many=True)
print(serializer.data)
return JsonResponse({
"code":200,
"msg":"OK",
"data":serializer.data
})
elif request.method=="POST":
# post请求修改更新对应的信息
params=JSONParser().parse(request)
# 创建序列化器
ser=UserInfoSerializer(data=params)
# 校验请求参数
if ser.is_valid():
ser.save()
return JsonResponse(responeString(201,msg="OK",data=ser.data))
else:
# 返回校验失败的提示
return JsonResponse(responeString(400,msg=ser.errors))
else:
return JsonResponse({"code":404,"msg":f"服务器不支持该类的请求{request.method}"})