目 录CONTENT

文章目录

DjangoRestFramework原来如此!

phyger
2022-06-17 / 0 评论 / 1 点赞 / 900 阅读 / 3,016 字 / 正在检测是否收录...

1、前言

Django是一个Python开发的Web框架,使用Django我们可以快速开发网站、个人博客等。但是通常使用Django我们都是使用后端直接将html渲染到浏览器。有时候我们也会使用其开发纯粹的后端接口。至于用作何用,取决于我们在视图函数中国return了什么(return Render 或者 return JsonResponse)。

DjangoRestFramework是基于Django的纯Api开发工具,当我们想要开发一个纯后端程序,为前端提供数据的时候,我们通常会选择DjangoRestFramework。而且我们可以利用DjangoRestFramework的ModelViewSet和serializers.ModelSerializer快速实现Model的CURD。

2、快速开始

2.1、创建项目&安装DJ,DRF

pip install django
pip install djangorestframework

mkdir django-demo && cd django-demo
django-admin startproject dj0

2.2、同步数据库&创建用户

python manage.py migrate
python manage.py createsuperuser

2.3、创建App

cd dj0 && python manage.py startapp app0

2.4、配置项目settings.py

注册app和drf到项目

dj0/settings.py

INSTALLED_APPS = [
    ...
    'rest_framework',
    'app0',
]

2.5、模型创建

app0/models.py

from django.db import models

# Create your models here.

class Person(models.Model):
    name=models.CharField(max_length=50,verbose_name='姓名',null=False)
    age=models.IntegerField(verbose_name='年龄')
    sex=models.BooleanField(default=True,verbose_name='性别')

    class Meta:
        db_table='users'
        verbose_name='用户'
        verbose_name_plural = verbose_name

创建完模型之后一定记得同步数据库结构。

  1. python manage.py makemigrations
  2. python manage.py migrate

2.6、序列化模型

app0/serializers.py

from rest_framework import serializers
from app0.models import Person

# 创建序列化器类,在试图中被调用
class PersonModelSerializer(serializers.ModelSerializer):
    class Meta:
        model = Person
        fields = "__all__"

2.7、视图函数开发

这里我们可以在视图函数中返回html、字符串、json等各种类型的数据,但是在drf的接口中,我们指定查询数据的语句(对象)和序列化类即可。

# Create your views here.
from django.http import HttpResponse
import datetime

def v1(request):
    now = datetime.datetime.now()
    html = "<html><body>It is now %s.</body></html>" % now
    return HttpResponse(html)
    
def hi(request):
    return HttpResponse('<h1>hi,baby!</h1>')

from rest_framework.viewsets import ModelViewSet
from .models import Person
from .serializers import PersonModelSerializer
# Create your views here.
class PersonViewSet(ModelViewSet):
    queryset = Person.objects.all()  # 指定查询到的数据对象,数据集合
    serializer_class = PersonModelSerializer # 指定序列化器 

2.8、url分发

即将app的urls装到project的urls中。虽然我们也可以在project的urls中直接路由到app中的视图,但是为了遵守蓝图的规范,我们还是需要对不同app的路由在project中进行分发。

dj0的urls.py

from django.contrib import admin
from django.urls import path,include
from app0 import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('app0/', include('app0.urls')),  # 路由到app0/,会自动转发到app0里面的urls中去
    path('',views.hi) # / 路径,会被路由到app0的hi视图中去
    ]

app0的urls.py

from django.urls import path

from . import views
from rest_framework.routers import DefaultRouter

# 普通的路由
app_name='app0'
urlpatterns = [
    path('', views.v1,name='app0index'),
    path('hi', views.hi,name='hi'),
]

# drf的路由
router = DefaultRouter()  # 可以处理视图的路由器
router.register('person', views.PersonViewSet)  # 向路由器中注册视图集
urlpatterns += router.urls

2.9、启动服务

python manage.py runserver localhost:8989

访问链接:http://localhost:8989/app0/person/

localhost_8989_app0_person_

可以看到,DRF为我们提供了一个良好的操作页面,我们可以在这里进行get、post、options请求。即CR功能已经实现。

2.10、CR

我们输入姓名、年龄、性别后点击POST即可创建一条数据。

localhost_8989_app0_person_ (1)

2.11、UD

我们访问在访问链接后面加上id即可到达对象的详情页。

访问链接:http://localhost:8989/app0/person/3

localhost_8989_app0_person_3_

如上,在这个详情页我们就可以对这个对象进行更新删除操作了。

如此,UD功能实现。

以上,CRUD都可以使用curl、http工具进行测试,亦能为前端提供数据支持。

3、总结

DjangoRestFramework就是一个可以不用实现CRUD代码、仅使用Model、Serializers、ModelViewSet就能够快速实现CRUD的Django工具。

1

评论区