只需使用django构建一个强大的JSONRESTAPI
djsonREST的Python项目详细描述
djsonREST公司
djsonREST提供了简单而强大的特性,可以在几分钟内实现您自己的REST-API(数据编码为json)。在
默认情况下,将对路由进行版本控制。在
它还包括一个插件,用于使用JWTs使用消费者和用户进行身份验证。在
rest路由url的基本结构:
your_path/
+VersionMajor.Minor
+/endpoint_url
安装
使用python包管理器pip安装djsonrest。在
pip install djsonrest
依赖关系
djutils
使用
添加到您的django项目
将djsonrest
添加到您的INSTALLED_APPS
。在
如果要覆盖djsonrest提供的默认路由,请在订购project应用之前订购此应用程序。在
将djsonrest.middleware.RESTRoutesMiddleware
添加到您的MIDDLEWARE
。在
MIDDLEWARE=[...'djsonrest.middleware.RESTRoutesMiddleware',]
如果要自定义rest路由的异常处理,请重写RESTRoutesMiddleware
类和
而是配置自己的中间件类。在
将api终结点的路径添加到网址.py的urlpatterns
。在
fromdjsonrestimportresturlpatterns=[...path('api/',rest.routes.urls),]
定义路线
使用route decorator @rest.route(...)
定义自己的rest路由。
所有rest路由都必须在应用程序/项目中名为rest_routes
的模块中定义。
此模块将在django初始化时自动加载,因此正在注册路由。在
fromdjsonrestimportrestclassUsers(rest.RESTRouteGroup):@rest.route('/users',version=1.0,method='GET')defusers_get(self,request):return[...]# Return any json-encodable object
使用定义为类方法的路由,可以在继承的类中重写它们。这样您就可以提供可扩展的路线。 若要重写现有路由,请保持路由装饰器不变。如果要添加第二条管线,请更改管线装饰器。在
classMyUsers(Users):@rest.route('/users',version=1.0,method='GET')defusers_get(self,request):result=super().users_get(request)result.append([...])returnresultclassMyUsersV2(Users):@rest.route('/users',version=2.0,method='GET')defusers_get(self,request):result=super().users_get(request)return{"users":result}
具有身份验证的路由
route decorator提供一个auth
参数,auth类(djsonrest.auth.Authentication
的子类)可以传递给它。
在主处理请求之前,将使用给定的auth类对请求进行身份验证。在
已给定以下身份验证类:
djsonrest.auth.Public
(默认) 公共路由,不进行身份验证djsonrest.addons.jwt_auth.auth.AbstractJWTAuth
(JWT身份验证的抽象基类) 在Authentication
HTTP报头中需要一个类型为Bearer
的JWT令牌djsonrest.addons.jwt_auth.auth.Consumer
(jwt\u auth插件,扩展djsonrest.addons.jwt_auth.auth.AbstractJWTAuth
) 需要一个JWT令牌,其受众为consumer
。请求用户将是在使用者记录中定义的用户djsonrest.addons.jwt_auth.auth.User
(jwt\u auth插件,扩展djsonrest.addons.jwt_auth.auth.AbstractJWTAuth
)UserStrong
和{}身份验证的基。期望JWT令牌具有访问群体 user_strong
或{} 具有访问群体 user_strong
的令牌仅在1小时内有效(默认情况下,可以在您的设置中保存),因此 可以将这些令牌用于高风险终结点,这些端点应仅在初始身份验证后的短时间内可用 针对api 具有访问群体user_weak
的令牌有效期为30天(默认值,可以在您的设置中更改),因此这些令牌 可用于用户与api的一般交互djsonrest.addons.jwt_auth.auth.UserStrong
(jwt\u auth插件,扩展djsonrest.addons.jwt_auth.auth.AbstractJWTAuth
) 与User
身份验证类似,但只接受访问群体user_strong
的令牌djsonrest.addons.jwt_auth.auth.UserWeak
(jwt_auth插件,扩展djsonrest.addons.jwt_auth.auth.AbstractJWTAuth
) 与User
身份验证类似,但只接受访问群体user_weak
的令牌
fromdjsonrestimportrestfromdjsonrest.addons.jwt_authimportauthclassUsers(rest.RESTRouteGroup):@rest.route('/users',version=1.0,method='GET',auth=auth.UserWeak)defusers_get(self,request):return[...]@rest.route('/users/<int:id>',version=1.0,method='PATCH',auth=auth.UserStrong)defuser_edit(self,request,id):# high risk action, protected by a short life token...
多种身份验证方法
如果应该有多个身份验证方法可用,那么可以使用|
-运算符将它们组合到HybridAuth
。
使用HybridAuth
和|
-运算符,所有组合的身份验证方法都会相互尝试。
这样,就可以为单个路由定义多个可用方法。在
fromdjsonrestimportrest,authfromdjsonrest.addons.jwt_authimportauthasjwt_authclassUsers(rest.RESTRouteGroup):@rest.route('/users',version=1.0,method='GET',auth=jwt_auth.UserWeak|auth.Public)defusers_get(self,request):return[...]
配置JWT签名
要使用jwt_auth插件,必须设置一些设置并创建文件。在
创建私钥和公钥文件:
openssl ecparam -genkey -name secp521r1 -noout -out private.pem openssl ec -in private.pem -pubout -out public.pem
在settings.py
中设置这些文件的路径:
JWT_PRIVATE_KEY_FILE=os.path.join(BASE_DIR,'keys','private.pem')JWT_PUBLIC_KEY_FILE=os.path.join(BASE_DIR,'keys','public.pem')
移除现有路由
这将用于其他应用程序注册的不需要的路由
建议在rest_routes
模块的__init__.py
中实现(如果只是一个文件,则在开头实现)。
它是可以删除具有给定的path
(始终是必需的)的所有路由,或者通过添加要删除的路由的版本和方法对其进行筛选。在
fromdjsonrestimportrestrest.remove('/unwanted/anything')rest.remove('/unwanted/route_at_version',version=1.0)rest.remove('/unwanted/method_route_at_version',version=1.0,method='GET')
许可证
GNU GPLv3,请参阅许可证
维护者
此包由Manuel Stingl维护。 有关详细信息,请参见https://opensource.voltane.eu
- 项目
标签: