DjangoRestFramework急速入门

简介: DjangoRestFramework急速入门

网络异常,图片无法展示
|




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/


1.png


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


2.10、CR


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


2.png


2.11、UD


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


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


3.png


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


如此,UD功能实现。


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


3、总结


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

相关文章
|
canal Kubernetes 网络架构
K8s CNI 网络最强对比:Flannel、Calico、Canal 和 Weave
Kubernetes 采用的 CNI 标准,让 Kubernetes 生态系统中的网络解决方案百花齐放。更多样的选择,意味着大多数用户将能够找到适合其当前需求和部署环境的 CNI 插件,同时还可以在环境发生变化时也能找到新的解决方案。
4196 1
|
存储 开发框架 Java
什么是Spring?什么是IOC?什么是DI?IOC和DI的关系? —— 零基础可无压力学习,带源码
文章详细介绍了Spring、IOC、DI的概念和关系,解释了控制反转(IOC)和依赖注入(DI)的原理,并提供了IOC的代码示例,阐述了Spring框架作为IOC容器的应用。
910 1
什么是Spring?什么是IOC?什么是DI?IOC和DI的关系? —— 零基础可无压力学习,带源码
|
数据采集 存储 JavaScript
自动化数据处理:使用Selenium与Excel打造的数据爬取管道
本文介绍了一种使用Selenium和Excel结合代理IP技术从WIPO品牌数据库(branddb.wipo.int)自动化爬取专利信息的方法。通过Selenium模拟用户操作,处理JavaScript动态加载页面,利用代理IP避免IP封禁,确保数据爬取稳定性和隐私性。爬取的数据将存储在Excel中,便于后续分析。此外,文章还详细介绍了Selenium的基本设置、代理IP配置及使用技巧,并探讨了未来可能采用的更多防反爬策略,以提升爬虫效率和稳定性。
734 4
|
Linux 语音技术 Python
如何解决kaldi的依赖库mkl安装失败的问题
通过搜索大量的资料,但都发现不太适用。现在将失败的症状和解决方法分享一下,希望能给读者提供一些帮助。
如何解决kaldi的依赖库mkl安装失败的问题
|
存储 SQL 测试技术
基于SpringBoot+Vue交通管理在线服务系统的开发(源码+部署说明+演示视频+源码介绍+lw)(2)
基于SpringBoot+Vue交通管理在线服务系统的开发(源码+部署说明+演示视频+源码介绍+lw)
249 2
|
达摩院 供应链 JavaScript
网络流问题--仓储物流调度【数学规划的应用(含代码)】阿里达摩院MindOpt
本文通过使用MindOpt工具优化仓储物流调度问题,旨在提高物流效率并降低成本。首先,通过考虑供需匹配、运输时间与距离、车辆容量、仓库储存能力等因素构建案例场景。接着,利用数学规划方法,包括线性规划和网络流问题,来建立模型。在网络流问题中,通过定义节点(资源)和边(资源间的关系),确保流量守恒和容量限制条件下找到最优解。文中还详细介绍了MindOpt Studio云建模平台和MindOpt APL建模语言的应用,并通过实例展示了如何声明集合、参数、变量、目标函数及约束条件,并最终解析了求解结果。通过这些步骤,实现了在满足各仓库需求的同时最小化运输成本的目标。
|
存储 数据采集 监控
CDGA\如何建立实现数据治理的效率价值框架:实践案例解析
数据治理是一个持续优化的过程。组织应建立健全的监督与评估机制,定期对数据治理工作进行评估,发现问题及时整改。广东药科大学通过数据全景图和数据监控大屏,实现了对数据治理成果的动态、多维度呈现与监控,为科学管理决策提供了有力支撑。
|
机器学习/深度学习 数据采集 TensorFlow
深入浅出:用深度学习识别手写数字
【9月更文挑战第5天】本文将带领读者通过一个实际的项目案例——使用深度学习模型识别手写数字,来了解深度学习的基本概念和工作流程。我们将从数据预处理开始,逐步构建一个简单的神经网络模型,并使用Python和TensorFlow库进行训练和测试。文章旨在为初学者提供一个易于理解且实用的深度学习入门教程,帮助读者掌握如何应用深度学习技术解决实际问题。
228 5
|
移动开发 前端开发 JavaScript
【前端面试】前端面试题300道~~熬夜吐血整理,2024年最新大厂面试经验分享稿
【前端面试】前端面试题300道~~熬夜吐血整理,2024年最新大厂面试经验分享稿
|
XML 存储 JavaScript
XML DOM - 访问节点
DOM 允许访问 XML 文档的每个节点, 主要通过三种方式: 1. 使用 `getElementsByTagName()` 方法; 2. 循环遍历节点树; 3. 利用节点间关系导航。`getElementsByTagName()` 返回节点列表, 类似数组结构。示例代码加载 &quot;books.xml&quot; 到 xmlDoc, 并存储结果于变量 x 中。

热门文章

最新文章