- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Python django中如何使用restful框架由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
在使用django进行前后台分离开发时通常会搭配django-rest-framework框架创建RESTful风格的接口API。框架介绍及版本要求可参考官方地址:https://www.django-rest-framework.org 。
本文以创建man包含name、sex字段的API为实例学习django-rest-framework框架的使用.
主要包含下面5个步骤:
1.创建Django项目 。
2.创建ORM模型 。
3.加载Django REST Framework 。
4.序列化模型 。
5.创建加载数据的view和url 。
1.创建Django项目 。
创建django_rest 。
。
django-admin startproject django_rest
进入django_rest,创建虚拟环境env 。
。
virtualenv env
激活虚拟环境,并安装django 。
。
source ./env/bin/activate
安装 django 。
。
pip install django
创建rest_app 。
。
python manage.py startapp rest_app
注册app,将app添加到INSTALLED_APPS 。
。
#setting.pyINSTALLED_APPS = [ "django.contrib.admin", "django.contrib.auth", "django.contrib.contenttypes", "django.contrib.sessions", "django.contrib.messages", "django.contrib.staticfiles", "rest_app"]
创建后台admin账户用于管理 。
。
$ python manage.py createsuperuserUsername (leave blank to use "root"):admin Email address: Password: Password (again): Superuser created successfully.
2.创建ORM模型 。
数据库我们使用默认sqlite3 即可,如需要变更可在setting.py中databases配置.
修改我们/django_rest/models.py添加我们man的模型 。
。
#models.pyfrom django.db import models# Create your models here.class Man(models.Model): name = models.CharField(max_length=64) sex = models.CharField(max_length=64) def __str__(self): return self.name
做数据库迁移 。
。
python manage.py makemigrations python manage.py migrate
将Man这个model注册到我们的后台,以便可以通过django的后台做增删查改,编写admin.py如下 。
。
#admin.pyfrom django.contrib import adminfrom .models import Man# Register your models here.admin.site.register(Man) # 注册Man到后台
启动django服务 。
。
python manage.py runserver
访问 http://127.0.0.1:8000/admin/可以看到登录界面,输入密码登录 。
可以看到我们的rest_app下的模型man对象mans 。
我们添加一个那个男人lgd.ame 。
3. 加载Django REST Framework 。
安装工具包 。
。
pip install djangorestframework
注册rest_framework 。
。
#setting.pyINSTALLED_APPS = [ "django.contrib.admin", "django.contrib.auth", "django.contrib.contenttypes", "django.contrib.sessions", "django.contrib.messages", "django.contrib.staticfiles", "rest_app" "rest_framework" #注册]
4.序列化模型 。
序列化器会把我们的模型数据转化(序列化)为json格式,这样就能够被请求了。同样当有josn数据提交过来的时候,序列化器会将json数据转换为模型供咋们使用.
我们在rest_app下创建文件serializer.py 。
我们要做三件事:
1.导入Man模型 。
2.导入序REST Framework序列化器 。
3.创建新的类将模型和序列化器链接起来 。
from rest_framework import serializersfrom .models import Manclass Manserializer(serializers.HyperlinkedModelSerializer): class Meta: model = Man fields = ("name","sex")
5.创建加载数据的view和url 。
我们需要把序列化后的数据返回给浏览器,所以要做一下步骤:
1.通过不通的Man查询数据库 。
2.将查询后的数据传递给序列化器,通过序列化器转化为json 。
我们在rest_app/views.py编写我们的视图,ModelViewSet由rest_framework提供,包含了get、post方法 。
。
# views.pyfrom rest_framework import viewsetsfrom .serializers import ManSerializerfrom .models import Manclass ManViewSet(viewsets.ModelViewSet): queryset = Man.objects.all().order_by("name") #查询结果给queryset serializer_class = ManSerializer #对结果进序列化
在django_rest目录下urls.py添加api路由 。
。
from django.contrib import adminfrom django.urls import path, includeurlpatterns = [ path("admin/", admin.site.urls), path("", include("rest_app.urls")), ]
在rest_app目录下创建urls.py添加视图路由,通过rest_framework中router确保我们的请求到正确的动态资源.
。
from django.urls import include, pathfrom rest_framework import routersfrom . import viewsrouter = routers.DefaultRouter()router.register(r"man", views.ManViewSet) #路由到ManViewSet视图# Wire up our API using automatic URL routing.# Additionally, we include login URLs for the browsable API.urlpatterns = [ path("", include(router.urls)), #使用router路由 path("api-auth/", include("rest_framework.urls", namespace="rest_framework"))]
最后我们来启动服务,访问http://127.0.0.1:8000/ 可以在浏览器查看到我们api信息 。
。
python manage.py runserver
访问http://127.0.0.1:8000/man/ 来查看man资源 。
通过id来访问api资源http://127.0.0.1:8000/man/1/ 。
这样我们一个基础restful风格的API创建完成了。感觉关键点还是理解ModelViewSet和内置router不读源码很难知其所以然.
到此这篇关于Python django中如何使用restful框架的文章就介绍到这了,更多相关restful框架的使用内容请搜索我以前的文章或继续浏览下面的相关文章希望大家以后多多支持我! 。
原文链接:https://www.cnblogs.com/qsing/p/14915226.html 。
最后此篇关于Python django中如何使用restful框架的文章就讲到这里了,如果你想了解更多关于Python django中如何使用restful框架的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我对 Python-Django 和 web 开发还很陌生,我被困在这个使用 POST 创建新资源的特殊问题上。 我正在为 REST API 使用 Django REST 框架,我正在尝试创建一个新资
我已经使用 Django-storages 成功地将 Word 文档存储到 S3。 class Document(TitleSlugDescriptionModel, TimeStampedModel
我有 2 个关于模型代理的问题, 如何从模型对象创建代理对象? 如何从模型查询集创建代理查询集? 例如,假设我们定义了: from django.contrib.auth.models import
我想编写一个直接执行 HTTP 请求的单元测试(而不是使用 django.test.client.Client)。 如果您好奇为什么 - 那是因为我想测试我从 Django 应用程序公开的 Thrif
我为我的个人网站启动了一个 django 项目来学习 django。到目前为止,我已经将我的开发环境设置为我需要的一切,并遵循 this很棒的教程来创建一些基本的数据结构和模板。现在我想开始使用我之前
我已经阅读了很多关于如何在使用 Django 注册时添加额外字段的信息,例如 here 、 here 和 here 。代码片段是: forms.py(来自注册应用程序) class Registrat
我正在编写小型社交应用程序。功能之一是在网站标题中写入用户名。因此,例如,如果我登录并且我的名字是Oleg(用户名),那么我应该看到: Hello, Oleg | Click to edit prof
我有一个使用 Django 和 Django Rest 框架开发的应用程序。我想将 django-reversion 功能添加到我的应用程序中。 我已经尝试过http://django-reversi
我有一个简单的 HTML 表单,我没有使用 Django 表单,但现在我想添加一个选择。 选择最容易创建为 Django ChoiceField (与通过循环等手动创建选择相反),但是,如果没有在 D
我不明白为什么人们以两种方式编写外键,这样做的目的是什么?它们是相同还是不同? 我注意到有些人这样写: author = models.ForeignKey(Author, on_delete=mod
我想在我的 Django 应用程序中获取评论最多的十个帖子,但我做不到,因为我想不出合适的方法。 我目前正在使用 django 评论框架,并且我已经看到使用 aggregate or annotate
这对于 Django 1.2 仍然有效吗? Custom Filter in Django Admin on Django 1.3 or below 我已经尝试过,但管理类中的 list_filter
问题在于,当 django-compressor 编译为 .js 文件的 CoffeeScript 文件中引用 {{ STATIC_URL }} 时,它无法正确加载。 在我的 django 模板中,我
我正在尝试将一些字段从一个 django 模型移动到一个新模型。假设我有一个书籍模型: class Book(models.Model): title = models.CharField(max
我想在我的 Django 应用程序中获取评论最多的十个帖子,但我做不到,因为我想不出合适的方法。 我目前正在使用 django 评论框架,并且我已经看到使用 aggregate or annotate
目前我正在寻找在 Django 中实现访问控制。我已经阅读了有关内置权限的内容,但它并不关心每个对象的基础。例如,我想要“只有创建者可以删除自己的项目”之类的权限。所以我读到了 django-guar
嗨,我正在将我的 Django 模型的一个字段的值设置为其他模型的另一个字段的值。这个值应该是动态变化的。 这是我的第一个模型 class MainModel(AbstractBaseUser, Pe
我正在尝试为我的模型创建一个编辑表单。我没有使用模型表单,因为根据模型类型,用户可以使用不同的表单。 (例如,其中一个表单有 Tinymce 小部件,而另一个没有。) 有没有什么方法可以使用模型设置表
Django 模板中的搜索字段 如何在类似于此图像的 Django 模板中创建搜索字段 http://asciicasts.com/system/photos/1204/original/E354I0
根据 Django documentation ,如果 Django 安装激活了 AuthenticationMiddleware,HttpRequest 对象有一个“user”属性代表当前登录的用户
我是一名优秀的程序员,十分优秀!