这是一个django应用程序,将django用作dmz中前端设备/服务器和后端服务器之间的代理服务器

django-proxy-server的Python项目详细描述


#django_proxy_server

这是一个django应用程序,将django用作军事化区域内前端设备/服务器和后端服务器之间的代理服务器。可以使用django rest框架公开服务。为了标识自身,django代理服务器使用在"设置"中定义的secret_key变量作为其api密钥。


例如:

已安装的应用程序=(

"代理服务器",



您可以通过向settings.py添加以下内容并通过pip安装来获得django rest framework支持:

rest_framework_support=true


将以下选项添加到settings.py文件以进行配置:

proxy_api_keys=[
希望允许使用服务
需要API密钥。如果没有api密钥,则无法使用服务
]

#要使用的后端服务的IP或域地址
后端主机='127.0.0.1'


要使用后端服务的端口
后端端口='8000'

在中间件类设置的末尾添加以下中间件:

middleware\u classes=(

'proxy\u server.middleware.disablecsrf',



为了避免CSRF检查。

delete选项public表示服务将公开为public,
从传统的django视图或使用django作为代理服务器的外部设备。调用后端服务的函数依赖于helper函数generate_service_url。


generate_service_url函数允许将参数附加到url,如果kwarg encrypted设置为true(默认情况下,这是错误的)。

使用传统的django视图时,按如下方式调用服务:


从代理服务器。后端服务从代理服务器导入调用后端服务
。帮助程序导入生成服务url


def函数(请求):

状态,response=invoke_backend_service('get',generate_service_url('/get_user',params={username':'proxy_server_admin'},encrypted=true),请求=请求)



invoke_backend_服务接收以下参数:
*方法:要调用的服务的方法
*函数路径:服务url的路径
*json_data:包含服务主体内容的字典。默认值:空dict.
*请求:包含用户和头信息的django视图的请求
*response_token:指示是否需要响应令牌的布尔参数。默认情况下,服务在响应时需要一个标记。
*public:boolean参数表示f访问的服务是公共的。默认情况下,调用的服务不是公共的。
*secure:boolean参数,指示是否必须通过https建立web服务连接。默认情况下,连接是使用http创建的。

当使用django作为代理服务器时,按如下方式调用服务:

from proxy_server.decorators import expose_service
from proxy_server.helpers import generate_service_url
from proxy_server.backend_services importinvoke_backend_service_as_proxy
导入proxy_server

@expose_service(['get'])
def home(请求):

response=invoke_backend_service_as_proxy(请求,'get',生成服务URL('/get_user',params={'username':'proxy_server_admin'},加密=真)。secure=true)



invoke_backend_service_as_proxy接收以下参数:
*请求:包含用户和头信息的django视图的请求
*方法:要调用的服务的方法
*函数路径:服务的路径url
*json_data:包含服务正文内容的字典。默认值:空dict.
*response_token:指示是否需要响应令牌的布尔参数。默认情况下,服务在响应时需要令牌。
*secure:boolean参数,指示是否必须通过https建立web服务连接。默认情况下,连接是使用http创建的。


1。如果服务器响应是200或204,则响应被重定向(视图用服务器响应的精确副本进行响应)。
2。如果服务器响应与200或204不同,则响应具有以下结构:

{
"错误":{
"代码":500,
"类型":"proxyservererror",
"消息":错误消息
而第二个则使用django的httpresponse对象进行响应。


#如果服务器返回
"过期日期":"2014-09-09 10:41:54",则为用户令牌的过期日期。
"如果用户令牌不存在,这不表示响应的内容。此内容也可以是响应的数组
}
}


。状态代码!=200

{
'用户令牌':'abc',如果服务器返回
'到期日期':'2014-09-09 10:41:54',则为用户令牌的到期日期。
如果用户令牌不存在,则也不表示
"错误":{
"代码":500,或服务器发送的任何其他代码。这是特定于服务器的错误类型。这是特定于服务器的
"消息":"错误消息"
}
}


\将缓存设置设置为首选后端,并将"novtory_admin.middleware.authmidleware"添加到中间件类设置中,如下所示:

authentication_backend=(
"proxy_server.authentication.auth.proxyserverbackend",


caches={
'默认':{
'后端':'django.core.cache.backends.locmem.locmemcache',
}
}


s=(

'代理服务器.身份验证.中间件.代理服务器中间件',



目前,django代理服务器仅支持路径"/登录"下的登录web服务。它依赖于您可以通过authenticate kwargs传递登录web服务主体,如下所示:

platform=platform)


身份验证后端用户对象使用电子邮件作为用户名,用户名的base64编码作为id。用户pk被分配为后端服务器通过调用后端服务函数返回的令牌。

正确地说,登录web服务必须返回一个带有email、name和is-active键的json字典。不允许员工或超级用户使用。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java向嵌入式Jetty添加多个端点   java如何在JAXWS处理程序中区分请求和响应?   使用Scenebuilder for JAVAFx的登录应用程序的java MVC体系结构   java对话框将不显示   Windows 7上的Java系统变量   java删除动态添加的面板   java将Javadoc嵌入到HTML网站中   带有URL编码数据的java Spring RestTemplate POST请求   java JAXR只运行一次函数   HttpClient缺少java依赖项   java深层反射比较   基于javarmi和CORBA的分布式计算   如何使用当前数据库时间从Java更新MongoDB?   java通过光标保存数据调试时显示错误数据