Django rest Framework 跑通流程总结
昨天跟着王进老师学了V5版本的前后分离,特此记录一下DRF跑通全流程
1. 安装配置环境
1.1 pycharm中新建立一个Django
因我们使用DRF,不需要Template功能,所以Templates folder这里置空![在这里插入图片描述](https://img-blog.csdnimg.cn/f4fd981a759549d9b69c8fb4fd15f47d.png)
1.2 测试是否安装成功
运行 python manage.py runserver 看看Django是否安装成功![在这里插入图片描述](https://img-blog.csdnimg.cn/0243cf169a9f43cda8d7dea6c4d3c27d.png) 3. 停止掉当前terminal终端,并执行pip install djangorestframework pymysql 安装好DRF和mysql包 ![在这里插入图片描述](https://img-blog.csdnimg.cn/60de4ac9116a47d7b5ae6fc9cc6bf356.png) ![在这里插入图片描述](https://img-blog.csdnimg.cn/5c118afceca843f8809b0f51208a561a.png) 4. 执行 python manage.py startapp stu 创建一个名为stu的app![在这里插入图片描述](https://img-blog.csdnimg.cn/aadacda887884c8d8b27fb5ca5a8d386.png) 5. 新建一个apps的目录,并将apps设置为Sources Root,将stu目录拖到apps里去 ![在这里插入图片描述](https://img-blog.csdnimg.cn/49ebfcb3ee4e4f1c86b230dd40923183.png) ![在这里插入图片描述](https://img-blog.csdnimg.cn/b782b660529d41b6bee535dd1104354e.png) ![在这里插入图片描述](https://img-blog.csdnimg.cn/c5b3309833b3462582af791f52081d70.png) ![在这里插入图片描述](https://img-blog.csdnimg.cn/77e1dc70a07144769b08fbe5f482ecce.png) ![在这里插入图片描述](https://img-blog.csdnimg.cn/4d25b23519e94735aeb20bfec99df161.png)
2. 开始注册app和映射路由
2.1 注册apps
apps所在目录注册(不注册的话django不能识别此目录) 注册app ![在这里插入图片描述](https://img-blog.csdnimg.cn/c6337e57b60d4183b07a8adb35ff6068.png)
2.2 url路由映射
在stu中新建立一个urls 将刚新建的stu.urls映射到根路由 ![在这里插入图片描述](https://img-blog.csdnimg.cn/7e5b45aa19114672b0d9714045bb0014.png)
3. 配置数据库连接
3.1 手动先创建一个mysql数据库
![在这里插入图片描述](https://img-blog.csdnimg.cn/30010e8116ed46a5bae592aae6a058a0.png)
3.2 配置mysql连接信息
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'stu_db',
'USER': 'root',
'PASSWORD': '12345.Com',
'HOST': '127.0.0.1',
'PORT': '3306',
}
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/638d4ad11c574a2f879d1aca74670871.png)
3.2 在__init__.py 导入mysql
import pymysql
pymysql.install_as_MySQLdb()
![在这里插入图片描述](https://img-blog.csdnimg.cn/da35fd8d976847a78b46f814dbf36998.png)
4. 代码部分
4.1 编写stu.models代码
from django.db import models
class Faculty(models.Model):
name = models.CharField(verbose_name='学院名称', max_length=100, unique=True, null=False, blank=False)
class Meta:
managed = True
app_label = 'stu'
db_table = 'stu_faculty'
def __str__(self):
return '%s' % (self.name)
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)
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 默认值 ![在这里插入图片描述](https://img-blog.csdnimg.cn/b9c8aec462394c76b86799d2e623ee3f.png)
4.2 序列化模型
在stu中建立一个serializer.py并写入如下代码,此处serializer.py只是大家约定约定熟成的名称
from rest_framework import serializers
from stu.models import Faculty, Major, Student
class FacultySerializer(serializers.ModelSerializer):
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__'
如图: ![在这里插入图片描述](https://img-blog.csdnimg.cn/8fe617e672804ae58233f735d8d38973.png)
4.3 书写视图
写视图
from django.shortcuts import render
from rest_framework.viewsets import 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
![在这里插入图片描述](https://img-blog.csdnimg.cn/4410e9c388334674bc66df324a2d0e3e.png)
4.4 从模型到数据库
4.4.1 生成数据库迁移文件
运行python manage.py makemigrations 生成数据库迁移文件
![在这里插入图片描述](https://img-blog.csdnimg.cn/ef83b2d64d20406c8f9316f715abc4cb.png)
4.4.2 模型同步到数据库
运行python manage.py migrate 将生成的数据库迁移文件迁移到数据库 ![在这里插入图片描述](https://img-blog.csdnimg.cn/03927b3f9593450bb2629c444bbda3c2.png) 去数据库中查看我们会发现生成了一系列表,其中有三张就是我们模型化得来的 ![在这里插入图片描述](https://img-blog.csdnimg.cn/9aee310818384518b4c7b7bb806a7ec7.png)
4.4.3 在数据库中添加一些测试数据
在stu_faculty学院表中添加测试数据 ![在这里插入图片描述](https://img-blog.csdnimg.cn/d149b63ac144475e94ba0c8bf1d41c5e.png) 在stu_major专业表中添加测试数据 ![在这里插入图片描述](https://img-blog.csdnimg.cn/a8b873f9b79f42eb93aa17876f35b4fd.png)
5. 程序跑起来
运行python manage.py runserver 把程序跑起来 访问我们刚才urls里配置路径 http://127.0.0.1:8000/stu/v1/ ![在这里插入图片描述](https://img-blog.csdnimg.cn/26fc5f2584ff4906afef47bfab0b8ad3.png) 在http://127.0.0.1:8000/stu/v1/facultys/ 里就是我们的学院信息
![在这里插入图片描述](https://img-blog.csdnimg.cn/3779a9eb056a4335990420c7313d45f2.png) 要查单独一条学院信息就是http://127.0.0.1:8000/stu/v1/facultys/{id值} ,如: ![在这里插入图片描述](https://img-blog.csdnimg.cn/b1e6820c77ac49109783d39e1a4e64bc.png) 查找专业 ![在这里插入图片描述](https://img-blog.csdnimg.cn/45b3b10e065b453ebbc79280c8677717.png) 查找学生发现没记录(我们本来在数据库中就没添加记录) ![在这里插入图片描述](https://img-blog.csdnimg.cn/c8628b8707474b05ac6ca007cba82f2a.png) 添加一个学生记录,添加后就有学生相应信息了 ![在这里插入图片描述](https://img-blog.csdnimg.cn/bd1fc546ec52430b82cf67c01538c486.png)
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
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 '%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
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
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('api/v1/', include('appname.urls')),
from rest_framework.routers import DefaultRouter
from appname.views import StudentViewSet
router = DefaultRouter()
router.register('', StudentViewSet, basename='')
urlpatterns = []
urlpatterns += router.urls
|