查看“Django RESTful api”的源代码
←
Django RESTful api
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
=知识点 = RESTful API现在很流行,这里是它的介绍 [http://www.ruanyifeng.com/blog/2011/09/restful.html 理解RESTful架构] 和 [http://www.ruanyifeng.com/blog/2014/05/restful_api.html RESTful API设计指南]. 按照Django的常规方法当然也可以实现REST,但有一种更快捷、强大的方法,那就是 Django REST framework.它是python的一个模块,通过在Django里面配置就可以把app的models中的各个表实现RESTful API =序列化= 什么是序列化?序列化有什么作用? [https://www.jianshu.com/p/407c6264c4e8 django 为什么要序列化-非常好的教程] on django Django中的序列化主要应用在将数据库中检索的数据返回给客户端用户,特别的Ajax请求一般返回的为Json格式 [https://blog.csdn.net/weixin_42575020/article/details/81541603 怎么理解django中的序列化] on python 为什么要序列化 我们把变量从内存中变成可存储或传输的过程称之为序列化 在程序运行的过程中,所有的变量都是在内存中,比如,定义一个dict: d = dict(name='Bob', age=20, score=88) 可以随时修改变量,比如把name改成'Bill',但是一旦程序结束,变量所占用的内存就被操作系统全部回收。如果没有把修改后的'Bill'存储到磁盘上,下次重新运行程序,变量又被初始化为'Bob'。 我们把变量从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其他语言中也被称之为serialization,marshalling,flattening等等,都是一个意思。 序列化之后,就可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上。 反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling。 Python提供了pickle模块来实现序列化。 <pre> In [1]: import pickle In [2]: d=dict(name='bob',age=20,score=88) In [3]: pickle.dumps(d) Out[3]: b'\x80\x04\x95$\x00\x00\x00\x00\x00\x00\x00}\x94(\x8c\x04name\x94\x8c\x03bob\x94\x8c\x03age\x94K\x14\x8c\x05score\x94KXu.' In [5]: import json In [6]: json.dumps(d) Out[6]: '{"name": "bob", "age": 20, "score": 88}' </pre> 小结 Python语言特定的序列化模块是pickle,但如果要把序列化搞得更通用、更符合Web标准,就可以使用json模块。 [https://www.liaoxuefeng.com/wiki/1016959663602400/1017624706151424 廖雪峰py序列化] 内存中的字典、列表、集合以及各种对象,如何保存到一个文件中。 设计一套协议,按照某种规则,把内存中的数据保存到文件中,文件是一个个字节序列。所以必须把数据额转换为字节序列,输出到文件,这就是序列化,反之,从文件的字节 序列恢复到内存中,就是反序列化。 1、定义 Serialization系列化,将内存中对象存储下来,把他变成一个个字节。二进制。 deSerialization反序列化,将文件的一个个字节到内存中。 序列化保存到文件就是持久化。 可将数据序列化后持久化,或者网络传输,也可以将文件中或者网络接受到的字节序列反序列化 =django模型类序列化器 ModelSerializer= <pre> 1. 定义 比如我们创建一个BookInfoSerializer class BookInfoSerializer(serializers.ModelSerializer): """图书数据序列化器""" class Meta: model = BookInfo fields = '__all__' model 指明参照哪个模型类 fields 指明为模型类的哪些字段生成 2. 指定字段 1) 使用fields来明确字段,__all__表名包含所有字段,也可以写明具体哪些字段,如 class BookInfoSerializer(serializers.ModelSerializer): """图书数据序列化器""" class Meta: model = BookInfo fields = ('id', 'btitle', 'bpub_date') 2) 使用exclude可以明确排除掉哪些字段 class BookInfoSerializer(serializers.ModelSerializer): """图书数据序列化器""" class Meta: model = BookInfo exclude = ('image',) eg class BookModelSerializer(serializers.ModelSerializer): class Meta: # 写一个内部类 model=models.Book # 该序列化类跟哪个表建立关系 fields = ['id','title'] # 序列化哪些字段 # fields = '__all__' # 序列化全部字段 </pre> [https://blog.csdn.net/huwei_1993/article/details/81665426 django模型类序列化器 ModelSerializer] =过程 = ==install == <pre> pip3 install djangorestframework #Django REST Framework pip3 install markdown # Markdown support for the browsable API. pip3 install django-filter # Filtering support </pre> ==创建API== python3 manage.py startapp api #当然 得先创建项目 <pre> setting.py 添加 INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'rest_framework', 'api', ] REST_FRAMEWORK = { 'DEFAULT_PERMISSION_CLASSES': ( 'rest_framework.permissions.IsAuthenticated', ) } 数据库迁移 python3 manage.py makemigrations python3 manage.py migrate 用我以前创建的可以用 创建数据 点击主页右上角的Log in登录超级管理员账户,然后分别创建Group和User数据 创建用户和组在这里 HTTP 200 OK Allow: GET, HEAD, OPTIONS Content-Type: application/json Vary: Accept { "users": "http://127.0.0.1:8000/users/?format=api", "groups": "http://127.0.0.1:8000/groups/?format=api" } </pre> == files== <pre> # 接下来需要做的就是创建 Serializer 类,类似于 Form。它的作用就是从你传入的参数中提取出你需要的数据,并把它转化为 json 格式(注意,已经是字节码了),同时支持反序列化到model对象。在 snippets 文件夹中添加 serializers.py 并在其添加如下: # on api/serializers.py from django.contrib.auth.models import User,Group from rest_framework import serializers class UserSerializer(serializers.HyperlinkedModelSerializer): class Meta: model=User fields=('url','username','email','groups') class GroupSerializer(serializers.HyperlinkedModelSerializer): class Meta: model=Group fields=('url','name') 解说 from rest_framework import serializers from app01 import models class BookModelSerializer(serializers.ModelSerializer): class Meta: # 写一个内部类 model=models.Book # 该序列化类跟哪个表建立关系 fields = ['id','title'] # 序列化哪些字段 # fields = '__all__' # 序列化全部字段 #视图 on api/views.py from django.shortcuts import render from django.contrib.auth.models import User,Group from rest_framework import viewsets from api.serializers import UserSerializer,GroupSerializer # Create your views here. class UserViewSet(viewsets.ModelViewSet): queryset = User.objects.all() serializer_class = UserSerializer class GroupViewSet(viewsets.ModelViewSet): queryset = Group.objects.all() serializer_class = GroupSerializer # Create your views here. #URL路由配置 项目名下的 /urls.py from django.contrib import admin from django.urls import path from django.conf.urls import include from rest_framework import routers from api import views router=routers.DefaultRouter() router.register(r'users',views.UserViewSet) router.register(r'groups',views.GroupViewSet) urlpatterns = [ path('admin/', admin.site.urls), path('',include(router.urls)), path('api-auth/',include('rest_framework.urls',namespace='rest_framework')), ] </pre> =troubleshooting= troubleshooting ModuleNotFoundError: No module named 'tutorial.quickstart' <pre> 加上project nmae 有错呀 urls.py from quickstart import views # from tutorail.quickstart import views views.py from quickstart.serializers import UserSerializer, GroupSerializer from tutorial.quickstart.serializers import UserSerializer, GroupSerializer INSTALLED_APPS = [ ... 'rest_framework', 'quickstart', </pre> 官方参考 文档 https://www.django-rest-framework.org/tutorial/quickstart/#project-setup =应该是另外一个例子= 这种接口可能和得少 不过学习还是有用的 note #on urls.py from django.urls import path, include 那个views_api 我放到views on apps(django_web) [https://www.cnblogs.com/liudinglong/p/12329425.html Django 单元测试笔记] [https://www.cnblogs.com/liudinglong/p/12333665.html Django Web接口开发] =see also= [https://sutune.me/2018/07/20/django-restful-api/ good Django Restful接口开发与测试] [https://www.cnblogs.com/zhouyang123200/p/6606405.html 利用Django实现RESTful API(一) ]
返回至
Django RESTful api
。
导航菜单
个人工具
登录
名字空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
导航
首页
我的导航
关于我
shell
python
ops
linuxchina.net
blog.linuxchina
最近更改
随机页面
帮助
工具
链入页面
相关更改
特殊页面
页面信息