【Django Rest Framework 跑通流程总结】

Django rest Framework 跑通流程总结


昨天跟着王进老师学了V5版本的前后分离,特此记录一下DRF跑通全流程

1. 安装配置环境

1.1 pycharm中新建立一个Django

因我们使用DRF,不需要Template功能,所以Templates folder这里置空在这里插入图片描述

1.2 测试是否安装成功

运行 python manage.py runserver 看看Django是否安装成功在这里插入图片描述
3. 停止掉当前terminal终端,并执行pip install djangorestframework pymysql 安装好DRF和mysql包
在这里插入图片描述
在这里插入图片描述
4. 执行 python manage.py startapp stu 创建一个名为stu的app在这里插入图片描述
5. 新建一个apps的目录,并将apps设置为Sources Root,将stu目录拖到apps里去
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

2. 开始注册app和映射路由

2.1 注册apps

apps所在目录注册(不注册的话django不能识别此目录)
在这里插入图片描述注册app
在这里插入图片描述

2.2 url路由映射

在stu中新建立一个urls在这里插入图片描述将刚新建的stu.urls映射到根路由
在这里插入图片描述

3. 配置数据库连接

3.1 手动先创建一个mysql数据库

在这里插入图片描述

3.2 配置mysql连接信息


# mysql写法,注意要自己先创建一个数据库,比如下面使用的叫stu_db,就先自己创建一个stu_db
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',  # 使用哪个数据库引擎
        'NAME': 'stu_db',  # 数据库名称
        'USER': 'root',  # 用户名
        'PASSWORD': '12345.Com',  # 密码
        'HOST': '127.0.0.1',  # 主机
        'PORT': '3306',  # 端口号
    }
}

在这里插入图片描述

3.2 在__init__.py 导入mysql

import pymysql
pymysql.install_as_MySQLdb()

在这里插入图片描述

4. 代码部分

4.1 编写stu.models代码

from django.db import models


# Create your models here.

# =============先分析一下stu中我们一共有三个表,学院 faculty ,专业 major ,学生 Student
# =============按表逐个书写

# =============1.第一个学院faculty表字段fields: name
class Faculty(models.Model):
    name = models.CharField(verbose_name='学院名称', max_length=100, unique=True, null=False, blank=False)  # 这里unique=True表示唯一字段

    class Meta:  # 数据元
        managed = True
        app_label = 'stu'  # app标签
        db_table = 'stu_faculty'  # 模型对应的表名

    def __str__(self):  # 都这样写,我也不知道为什么,教程是这样写的
        return '%s' % (self.name)
    
# ==============2.专业 Major:id ,name,faculty
class Major(models.Model):
    name = models.CharField(verbose_name='专业名称', max_length=100, null=False, blank=False)
    faculty = models.ForeignKey(verbose_name='所属学院', to=Faculty,on_delete=models.PROTECT)

    class Meta:
        managed = True
        app_label = 'stu'
        db_table = 'stu_major'

    def __str__(self):
        return '%s' % (self.name)

# =============3.学生信息  Student :sno, name, gender, birthday, major, mobile, email, address, image

class Student(models.Model):
    sno = models.CharField(verbose_name='学号', max_length=100, primary_key=True, null=False, blank=False)
    name = models.CharField(verbose_name='姓名', max_length=100, null=False, blank=False)
    gender = models.CharField(verbose_name='性别', max_length=100, null=True, blank=True, default=None)
    birthday = models.DateField(verbose_name='出生日期', null=True, blank=True, default=None)
    major = models.ForeignKey(verbose_name='专业', to=Major, on_delete=models.PROTECT)
    mobile = models.CharField(verbose_name='电话', max_length=100, null=True, blank=True, default=None)
    email = models.CharField(verbose_name='邮箱', max_length=100, null=True, blank=True, default=None)
    address = models.CharField(verbose_name='地址', max_length=100, null=True, blank=True, default=None)
    image = models.CharField(verbose_name='照片', max_length=100, null=True, blank=True, default=None)

    class Meta:
        managed = True
        app_label = 'stu'
        db_table = 'stu_student'

    def __str__(self):
        return '%s' % (self.name)

具体模型化的字段类型和相应的属性一共有哪些我也还没学完,
看字面意思models.CharField是字符串类型,models.DateField是日期类型,models.ForeignKey是外键
其中属性max_length=100是最大长度,primary_key=True主键,null=False不能为null,blank=False不能为空,default=None默认值
在这里插入图片描述

4.2 序列化模型

在stu中建立一个serializer.py并写入如下代码,此处serializer.py只是大家约定约定熟成的名称

#  习惯命名为serizlizer.py,命名为其它也行

from rest_framework import serializers  # 导入序列化类 serializers
from stu.models import Faculty, Major, Student  # 导入app stu 模型中我们建立的三个模型类

#  开始对这三个模型类进行序列化

#  ---学院序列化类----
class FacultySerializer(serializers.ModelSerializer):  # 继承serializers 中的模型序列化

    class Meta:
        model = Faculty
        fields = '__all__'  # 表示所有字段都参与序列化


#  ---专业序列化类----
class MajorSerializer(serializers.ModelSerializer):
    class Meta:
        model = Major
        fields = '__all__'


#  ---学生序列化类----
class StudentSerializer(serializers.ModelSerializer):
    class Meta:
        model = Student
        fields = '__all__'

如图:
在这里插入图片描述

4.3 书写视图

写视图

from django.shortcuts import render

# Create your views here.
from rest_framework.viewsets import ModelViewSet  # 封装完成的ModelViewSet视图集
from stu.models import Faculty, Major, Student # 具体的类
from stu.serializer import FacultySerializer, MajorSerializer, StudentSerializer # 序列化类


#  学院视图
class FacultyViewSet(ModelViewSet):
    queryset = Faculty.objects.all()
    serializer_class = FacultySerializer


#  专业视图
class MajorViewSet(ModelViewSet):
    queryset = Major.objects.all()
    serializer_class = MajorSerializer


#  学生视图
class StudentViewSet(ModelViewSet):
    queryset = Student.objects.all()
    serializer_class = StudentSerializer

在这里插入图片描述

4.4 从模型到数据库

4.4.1 生成数据库迁移文件

运行python manage.py makemigrations 生成数据库迁移文件

在这里插入图片描述

4.4.2 模型同步到数据库

运行python manage.py migrate 将生成的数据库迁移文件迁移到数据库
在这里插入图片描述
去数据库中查看我们会发现生成了一系列表,其中有三张就是我们模型化得来的
在这里插入图片描述

4.4.3 在数据库中添加一些测试数据

在stu_faculty学院表中添加测试数据
在这里插入图片描述
在stu_major专业表中添加测试数据
在这里插入图片描述

5. 程序跑起来

运行python manage.py runserver 把程序跑起来
访问我们刚才urls里配置路径 http://127.0.0.1:8000/stu/v1/
在这里插入图片描述
http://127.0.0.1:8000/stu/v1/facultys/里就是我们的学院信息

在这里插入图片描述
要查单独一条学院信息就是http://127.0.0.1:8000/stu/v1/facultys/{id值},如:
在这里插入图片描述
查找专业
在这里插入图片描述
查找学生发现没记录(我们本来在数据库中就没添加记录)
在这里插入图片描述
添加一个学生记录,添加后就有学生相应信息了
在这里插入图片描述

6. 总结一下知识点

跑通的整个过程回顾
创建Django项目—>创建app—>app路由映射—>配置数据库—>写数据库模型—>序列化数据库模型—>写视图—>迁移—>跑起来…

pip install pymysql djangorestframework
python manage.py startapp appname

创建一个apps python包
将appname目录移动到apps
setting.py中配置数据库,注册apps目录,注册app

models.py建立数据模型

from django.db import models

# Create your models here.

class Student(models.Model): 继承

    name = models.CharField(verbose_name='姓名', max_length=20, null=False, blank=False)
    ...
    ...
    birthday = models.DateField(verbose_name='出生日期', max_length=20, null=True, blank=True)

    class Meta:
        managed = True   
        app_label = 'myapp'
        db_table = 'tb_student'

    def __str__(self):
        # return f'{self.name}'  两种返回都可以
        return '%s' % (self.name)
python manage.py makemigrations  # 创建数据库迁移文件
python manage.py migrate  # 迁移数据库 

serializer models 将模型序列化
建立一个serializer.py

from rest_framework import serializer
from appname.models import Student

class StudentSerializer(serializer.ModelSerializer):
	
	class Meta:
		model = Student
		fields = "__all__"

创建视图views.py

# 这里要导入三个包,哪三个?想一下创建视图需要什么?
# 1. views视图类
# 2. model实例类
# 3. serializermodel实例类
from rest_framework.views import ModelViewSet
from appname.models import Student
from appname.serializer import StudentSerializer


class StudentViewSet(ModelViewSet):
	queryset = Student.object.all()
	serializer_class = StudentSerializer

创建appname/urls.py
在项目urls.py中建立包含app中urls

# 这里是项目urls的设置
from django.contrib import admin
from django.urls import path, include


urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/v1/', include('appname.urls')),
# 这里是app urls设置
# 想一下路由要什么?
# 1. rest_framework 路由类
# 2,view视图实例类
from rest_framework.routers import DefaultRouter
from appname.views import StudentViewSet
router = DefaultRouter()
router.register('', StudentViewSet, basename='')
urlpatterns = []
urlpatterns += router.urls
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值