IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 【Django Rest Framework 跑通流程总结】 -> 正文阅读

[Python知识库]【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
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-09-13 11:10:10  更:2022-09-13 11:12:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 10:44:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码