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}"})

晒一下部分笔记


Django框架学习心得
http://localhost:8090//archives/wei-ming-ming-wen-zhang
作者
黄健辉
发布于
2024年08月04日
许可协议