DRF使用記錄(一) - 初體驗
drf(Django REST framework)
下面簡單體驗一下drf
需要的包
django
djangorestframework
pymysql
創建django項目
django-admin startproject drf_demo
在settings.py
的INSTALLED_APPS中添加’rest_framework’。
INSTALLED_APPS = [
...
'rest_framework',
]
創建一個user
應用
python manage.py startapp user
把user
子應用添加到INSTALL_APPS中
INSTALLED_APPS = [
...
'rest_framework',
'user',
]
在drf_demo
的__init__
中設置pymysql
爲數據庫驅動
import pymysql
pymysql.install_as_MySQLdb()
settings.py
中數據庫相關配置
DATABASES = {
# 'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
# },
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': "drf_demo",
"HOST": "127.0.0.1",
"PORT": 3306,
"USER": "root",
"PASSWORD":"123456",
},
}
創建模型操作類
from django.db import models
# Create your models here.
class User(models.Model):
# 模型字段
name = models.CharField(max_length=10, verbose_name="姓名")
sex = models.BooleanField(default=1, verbose_name="性別")
age = models.IntegerField(verbose_name="年齡")
phone = models.CharField(max_length=20, null=True, verbose_name="電話")
addr = models.CharField(max_length=100,null=True,verbose_name="地址")
class Meta:
db_table = "tb_user"
verbose_name = "用戶"
verbose_name_plural = verbose_name
創建數據庫
create database drf_demo default charset=utf8;
模型遷移生成數據表格
python manage.py makemigrations
python manage.py migrate
創建序列化器
在user
應用目錄中新建serializers.py
用於保存該應用的序列化器。
創建一個UserModelSerializer
用於序列化與反序列化。
from rest_framework import serializers
from user.models import User
# 創建序列化器類,視圖中被調用
class UserModelSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = "__all__"
編寫視圖
user
應用中的views.py
from rest_framework.viewsets import ModelViewSet
from .models import User
from .serializers import UserModelSerializer
class UserViewSet(ModelViewSet):
queryset = User.objects.all()
serializer_class = UserModelSerializer
- queryset 指明該視圖集在查詢數據時使用的查詢集
- serializer_class 指明該視圖在進行序列化或反序列化時使用的序列化器
定義路由
user
應用中創建一個urls.py
from . import views
from rest_framework.routers import DefaultRouter
# 路由列表
urlpatterns = []
router = DefaultRouter() # 可以處理視圖的路由器
router.register('users', views.UserViewSet) # 向路由器中註冊視圖集
urlpatterns += router.urls # 將路由器中的所以路由信息追到到django的路由列表中
- 總路由配置
def_demo
中的urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('user/', include('user.urls'))
]
運行測試
python manage.py runserver
- 在瀏覽器中輸入網址127.0.0.1:8000/user,可以看到DRF提供的API Web瀏覽頁面:
- 點擊鏈接127.0.0.1:8000/user/users 可以訪問獲取所有數據的接口,呈現如下頁面:
- 目前數據庫暫無數據,可以用下面提供的post請求添加用戶
- 隨便創建的
- 在瀏覽器中輸入網址127.0.0.1:8000/user/users/3/,可以訪問獲取單一學生信息的接口(id爲3的用戶),呈現如下頁面:
- 下面的
PUT
請求可以更新id爲3的user信息 - 上面
DELETE
請求可以刪除id爲3的user信息