drf使用記錄(一) drf初體驗
drf(Django REST framework)
在這里插入圖片描述
下面簡單體驗一下drf
需要的包
django
djangorestframework
pymysql
創(chuàng)建django項目
django-admin startproject drf_demo
在settings.py的INSTALLED_APPS中添加'rest_framework'。
INSTALLED_APPS = [
...
'rest_framework',
]
創(chuàng)建一個user應(yīng)用
python manage.py startapp user
把user子應(yīng)用添加到INSTALL_APPS中
INSTALLED_APPS = [
...
'rest_framework',
'user',
]
在drf_demo的__init__.py中設(shè)置pymysql為數(shù)據(jù)庫驅(qū)動
import pymysql
pymysql.install_as_MySQLdb()
- PS
pymysql適用于Django2.2之前,2.2之后的推薦使用mysqlclient,否則就要修改部分源碼
pip install mysqlclient
drf_demo的__init__.py就這樣設(shè)置
# django2.2以后
import MySQLdb
settings.py中數(shù)據(jù)庫相關(guān)配置
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",
},
}
創(chuàng)建模型操作類
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
創(chuàng)建數(shù)據(jù)庫
create database drf_demo default charset=utf8;
模型遷移生成數(shù)據(jù)表格
python manage.py makemigrations
python manage.py migrate
創(chuàng)建序列化器
在user應(yīng)用目錄中新建serializers.py用于保存該應(yīng)用的序列化器。
創(chuàng)建一個UserModelSerializer用于序列化與反序列化。
from rest_framework import serializers
from user.models import User
# 創(chuàng)建序列化器類,視圖中被調(diào)用
class UserModelSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = "__all__"
編寫視圖
user應(yīng)用中的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 指明該視圖集在查詢數(shù)據(jù)時使用的查詢集
- serializer_class 指明該視圖在進行序列化或反序列化時使用的序列化器
定義路由
user應(yīng)用中創(chuàng)建一個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
- 在瀏覽器中輸入網(wǎng)址127.0.0.1:8000/user,可以看到DRF提供的API Web瀏覽頁面:
在這里插入圖片描述
- 點擊鏈接127.0.0.1:8000/user/users 可以訪問獲取所有數(shù)據(jù)的接口,呈現(xiàn)如下頁面:
- 目前數(shù)據(jù)庫暫無數(shù)據(jù),可以用下面提供的post請求添加用戶
在這里插入圖片描述
- 隨便創(chuàng)建的
在這里插入圖片描述
- 在瀏覽器中輸入網(wǎng)址127.0.0.1:8000/user/users/3/,可以訪問獲取單一學生信息的接口(id為3的用戶),呈現(xiàn)如下頁面:
在這里插入圖片描述
- 下面的
PUT請求可以更新id為3的user信息 - 上面
DELETE請求可以刪除id為3的user信息