之前的文章编写了一个返回json的例子,直接用浏览器进行得到请求虽然成功了,但是接口文档的样式很难看,不好用。而且提示没有访问权限。
我们一般都希望能够直接在接口文档中进行请求,以测试接口,本篇文章中会给出一个自定义大摇大摆(openapi)的例子。使接口文档变得美观可用,可以填写参数,可以进行请求以观察数据格式,测试接口是否可用。
被python35 皮普列表
chardet (3.0.4) coreapi (2.3.3) coreschema (0.0.4) Django (1.11.6) django-rest-swagger (2.1.2) django-simple-serializer (2.0.7) djangorestframework (3.7.1) 未来(0.16.0) idna (2.6) itypes (1.1.0) Jinja2 (2.9.6) MarkupSafe (1.0) openapi-codec (1.3.2) 皮普(9.0.1) pytz (2017.2) 请求(2.18.4) setuptools (36.6.0) simplejson (3.11.1) uritemplate (3.0.0) urllib3 (1.22) 轮(0.30.0)
阿里云的源中最新版的django-rest-frmework版本为3.7.1
3.6与3.7的结构稍有不同。我之前用3.6,但是以下对大摇大摆的修改以3.7.1版本为基准。理解原理之后不同版本只需要稍作修改即可。
进入设置。py文件,确保INSTALLED_APPS中包含rest_framework
INSTALLED_APPS=[ “django.contrib.admin”, “django.contrib.auth”, “django.contrib.contenttypes”, “django.contrib.sessions”, “django.contrib.messages”, “django.contrib.staticfiles”, “rest_framework”, “rest_framework_swagger”, “mytest”, )
我们导入了三个框架
-
<李> rest_framework李>
<李> rest_framework_swagger李>
<李> mytest(之前的文章中编写简单接口的应用)李>
然后在设置。py文件中添加以下代码
REST_FRAMEWORK={ #下面这一行表示接口文档的访问权限,AllowAny不做权限限制。 “DEFAULT_PERMISSION_CLASSES”: (“rest_framework.permissions.AllowAny”), #的页大小:10 “PAGINATE_BY”: 10 } SWAGGER_SETTINGS={ #基础样式 “SECURITY_DEFINITIONS”: { "基本":{ “类型”:“基本” } }, #如果需要登录才能够查看接口文档,登录的链接使用restframework自带的。 “LOGIN_URL”:“rest_framework:登录”, “LOGOUT_URL”:“rest_framework:注销”, #“DOC_EXPANSION”:没有, #“SHOW_REQUEST_HEADERS”:没错, #“USE_SESSION_AUTH”:没错, #“DOC_EXPANSION”:“列表”, #接口文档中方法列表以首字母升序排列 “APIS_SORTER”:“阿尔法”, #如果支持json提交,则接口文档中包含json输入框 “JSON_EDITOR”:没错, #方法列表字母排的序 “OPERATIONS_SORTER”:“阿尔法”, “VALIDATOR_URL”:没有, }
思路:
之前的url。py中的接口文档页面来自这里
从rest_framework。模式导入get_schema_view
查看源码,继承模式,返回模式的子类即可。
接下来编写自己的模式
从rest_framework。权限导入AllowAny 从rest_framework。模式导入SchemaGenerator 从rest_framework.schemas。发电机进口LinkNode insert_into 从rest_framework。渲染器进口* 从rest_framework_swagger导入渲染器 从rest_framework。响应进口响应 从rest_framework #。模式导入SchemaGenerator 类MySchemaGenerator (SchemaGenerator): def get_links(自我,请求=None): 从rest_framework.schemas #。进口LinkNode发电机, 链接=LinkNode () 路径=[] view_endpoints=[] 对于路径,方法,在self.endpoints回调: 视图=自我。create_view(回调方法,请求) 路径=自我。coerce_path(路径,方法,视图) paths.append(路径) view_endpoints。追加((路径、方法、视图)) #> 从django.conf。url输入url,包括 django。contrib进口管理 从rest_framework。模式导入get_schema_view 从mytest。视图导入ReturnJson 进口mytest #下面是刚才自定义的模式 从mytest。视图导入SwaggerSchemaView urlpattern=[ url (r ^ admin/, admin.site.urls), url (r ' ^ api-auth/?包括(“rest_framework。url”,名称空间=' rest_framework ')), url (r ^ docs/, SwaggerSchemaView.as_view ()、name=' apiDocs '), url (r ^ api/getjson, ReturnJson.as_view ()), )django-rest-framework自定义大摇大摆过程详解