目录python
核心思想: 缩减编写api接口的代码mysql
Django REST framework(DRF)是一个创建在Django基础之上的Web 应用开发框架,能够快速的开发REST API接口应用。在REST framework中,提供了序列化器Serialzier的定义,能够帮助咱们简化序列化与反序列化的过程,不只如此,还提供丰富的类视图、扩展类、视图集来简化视图的编写工做。REST framework还提供了认证、权限、限流、过滤、分页、接口文档等功能支持。REST framework提供了一个API 的Web可视化界面来方便查看测试接口。git
中文文档:https://q1mi.github.io/Django-REST-framework-documentation/#django-rest-frameworkgithub
GitHub:https://github.com/encode/django-rest-framework/tree/masterweb
DRF须要如下依赖:sql
DRF是以Django扩展应用的方式提供的,因此咱们能够直接利用已有的Django环境而无需重新建立。(若没有Django环境,须要先建立环境安装Django)数据库
前提是已经安装了django,建议安装在虚拟环境django
# mkvirtualenv drfdemo -p python3 # 建立虚拟环境, -p指定解释器 # pip install django pip install djangorestframework pip install pymysql
cd ~/Desktop django-admin startproject drfdemo
使用pycharm打开项目,设置虚拟环境的解析器,并修改manage.py中的后缀参数。api
在settings.py的INSTALLED_APPS中添加'rest_framework'。浏览器
INSTALLED_APPS = [ ... 'rest_framework', ]
接下来就可使用DRF提供的功能进行api接口开发了。在项目中若是使用rest_framework框架实现API接口,主要有如下三个步骤:
建立一个子应用student并注册
在student.models里面写入以下代码
class Student(models.Model): # 模型字段 name = models.CharField(max_length=100,verbose_name="姓名") sex = models.BooleanField(default=1,verbose_name="性别") age = models.IntegerField(verbose_name="年龄") class_num = models.CharField(max_length=5,verbose_name="班级编号") description = models.TextField(max_length=1000,verbose_name="个性签名") class Meta: db_table="tb_student" # 指定表名,不指定时会默认以app名_model名来命名 verbose_name = "学生" verbose_name_plural = verbose_name
create database students charset=utf8;
主应用中__init__.py
设置使用pymysql做为数据库驱动
import pymysql pymysql.install_as_MySQLdb()
setting.py里更改DATABASES设置
DATABASES = { # 'default': { # 'ENGINE': 'django.db.backends.sqlite3', # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), # }, 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': "students", "HOST": "127.0.0.1", "PORT": 3306, "USER": "root", "PASSWORD":"123", } }
python manage.py makemigrations python manage.py migrate
执行python manage.py makemigrations时报错
解决方案:
注释掉 backends/mysql/base.py中的35和36行代码。
继续迁移,又报错
解决方案
backends/mysql/operations.py146行里面新增一个行代码:
在student目录下面新建一个serializers.py用于保存改应用的序列化器
在serializers.py里建立一个StudentModelSerializer用于序列化和反序列化
# 建立序列化器类,回头会在视图中被调用 class StudentModelSerializer(serializers.ModelSerializer): class Meta: model = Student # 指定要操做的Model fields = "__all__" # 序列化全部字段,即返回的数据中包含全部student的字段
在studnet.views里面建立视图集,StudentViewSet,这是一个视图集合
from rest_framework.viewsets import ModelViewSet from .models import Student from .serializers import StudentModelSerializer # Create your views here. class StudentViewSet(ModelViewSet): queryset = Student.objects.all() serializer_class = StudentModelSerializer
在students应用的urls.py中定义路由信息。
from . import views from rest_framework.routers import DefaultRouter # 路由列表 urlpatterns = [] router = DefaultRouter() # 能够处理视图的路由器 router.register('students', views.StudentViewSet) # 向路由器中注册视图集 urlpatterns += router.urls # 将路由器中的因此路由信息追到到django的路由列表中
最后把student子应用中的路由文件加载到总路由文件中.
在drfdemo.urls.py里面
from django.contrib import admin from django.urls import path,include urlpatterns = [ path('admin/', admin.site.urls), path("stu/",include("students.urls")), ]
python manage.py runserver
在浏览器中输入网址127.0.0.1:8000,能够看到DRF提供的API Web浏览页面:
点击连接,就能够访问数据接口
能够对数据进行增删该查操做啦~