Django Rest Framework简单搭建

本文介绍了如何使用Django Rest Framework(DRF)快速搭建RESTful API。步骤包括安装DRF,创建Django项目和应用,配置settings.py,创建数据模型,进行数据迁移,定义序列化,编写视图层,设置URL路由,启动服务并进行接口测试。DRF提供了强大的功能,支持ORM和非ORM数据源的序列化,以及多种认证策略。
摘要由CSDN通过智能技术生成

目录

Django Rest Framework

以下特点:

创建简单的API


Django Rest Framework

 

以下特点:

drf框架,是一套基于django的rest风格框架。

  • 功能强大、灵活、能快速开发web API
  • 支持认证策略,包括OAuth 1a 和 OAuth 2
  • 支持ORM和非ORM数据源的序列化

 

创建简单的API

目录结构:

  1. 安装:pip install djangorestframework
  2. 创建django project项目和app,这边省略。。。django-admin startproject demo,cd demo, django-admin startapp drf_pro
  3. 配置demo/demo/settings.py文件
    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'drf_pro',#配置app
        'rest_framework',#配置drf应用
    ]
    
    #权限策略设置为全局范围内
    REST_FRAMEWORK = {
        'DEFAULT_PERMISSION_CLASSES':(
            'rest_framework.permissions.IsAuthenticated',
        )
    }
  4. 进入demo根目录,创建超级用户,python manage.py createsuperuser 输入用户名、邮箱、密码
  5. 配置demo/drf_pro/models.py数据库模型
    from django.db import models
    
    class DrfUser(models.Model):
        #id可以不写,如果要设置,需申明AutoField(primary_key=True)
        username = models.CharField(max_length=20,blank=True,null=False,verbose_name='姓名')
        age = models.IntegerField()
        birthday = models.DateTimeField(auto_now_add=True,blank=True, null=True,verbose_name='出生年月')
        is_marry = models.BooleanField(default=True,blank=False, null=False,verbose_name='是否已婚')
        address = models.TextField(max_length=999,blank=True,null=False,verbose_name='住址')
    
        class Meta:
            db_table = 'drf_user'
            verbose_name = "用户模块"
            verbose_name_plural = verbose_name
    
        def __str__(self):
            # 重写直接输出类的方法
            return "<MkUniqlo:{id=%s,username=%s}>"%(self.id,self.username)
    
    if __name__ =='__main__':
        pass
  6. 进行数据模型迁移和数据库创建:python manage.py makemigrations迁移/python manage.py migrate创建,如果后面加api就只迁移该应用,不加则迁移所有项目  
  7. 创建数据序列化,在drf_pro应用下创建serializers.py文件
    from .models import DrfUser
    from rest_framework import serializers
    
    class DrfUserSerializer(serializers.HyperlinkedModelSerializer):
        '''
        serializers用于定义API的表现形式,如返回哪些字段,返回怎样的格式等,这边序列化,models创建的DrfUser表
        '''
        class Meta:
            model = DrfUser
            fields = ['id','username','age','birthday','is_marry','address']
    
  8. 编写视图层文件,demo/drf_pro/views.py文件
    from .models import DrfUser
    from rest_framework import viewsets
    from .serializers import DrfUserSerializer
    
    #ViewSets视图的展现形式,例如返回哪些内容,需要做哪些权限处理
    class DrfUserViewSet(viewsets.ModelViewSet):
        '''
        允许用户查看或编辑
        '''
        queryset = DrfUser.objects.all()
        serializer_class = DrfUserSerializer
  9. demo/demo/urls.py,在url中定义相应规则到ViewSet,ViewSets通过serializer_class找到对应的Serializers。这边将DrfUser的所有对象赋予给queryset,并返回这些值。在DrfUserSerializer中定义要返回的字段。开始添加路由
    from django.contrib import admin
    from django.urls import path,include
    from drf_pro import views as drf_v
    from rest_framework import routers
    
    #roters可以自己匹配url
    router = routers.DefaultRouter()
    router.register(r'drf_user',drf_v.DrfUserViewSet)
    
    #使用自动url路由连接我们的api
    #此外,我们还包括登录后浏览api
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('',include(router.urls)),
        path('api-auth/',include('rest_framework.urls',namespace='rest_framework'))
    ]
    
  10. 启动服务:python manage.py runserver 0.0.0.0:8000,通过127.0.0.1:8000访问

  11. 通过右上角Log in登录

  12. 进入http://127.0.0.1:8000/drf_user/,添加用户数据

  13. demo/drf_pro/tests.py测试接口数据,这边演示一个get和post

    import pytest,requests
    
    class TestDemo:
    
        def setup(self):
            self.url = 'http://127.0.0.1:8000/drf_user/'
            self.auth = ('admin','admin')
    
        def test01(self):
            res = requests.get(url=self.url,auth=self.auth).json()
            for i in res:
                print(i.get('username'))
    
        def test02(self):
            data= {"username": "gggg", "age": 1, "is_marry": True, "address": "gggg"}
            res = requests.post(url=self.url,json=data,auth=self.auth)
            print(res)
    
    if __name__ =='__main__':
        pytest.main(['tests.py','-sq'])

     

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值