如何通过 mod-wsgi 使用 FCKEditor 的图像上传和浏览器?
我在 Apache/mod-wsgi 提供的 Django 应用程序中使用 FCKEditor。 我不想只为FCKEditor安装php,而且我看到FCKEditor通过Python提供图像上传和图像浏览。 我只是还没有找到关于如何设置这一切的良好说明。
因此,目前 Django 正在使用以下设置通过 wsgi 界面运行:
import os, sys
DIRNAME = os.sep.join(os.path.abspath(__file__).split(os.sep)[:-3])
sys.path.append(DIRNAME)
os.environ['DJANGO_SETTINGS_MODULE'] = 'myapp.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
在编辑器 -> 文件管理器 -> 连接器 -> py 目录中的 fckeditor 中,有一个名为 wsgi.py 的文件:
from connector import FCKeditorConnector
from upload import FCKeditorQuickUpload
import cgitb
from cStringIO import StringIO
# Running from WSGI capable server (recomended)
def App(environ, start_response):
"WSGI entry point. Run the connector"
if environ['SCRIPT_NAME'].endswith("connector.py"):
conn = FCKeditorConnector(environ)
elif environ['SCRIPT_NAME'].endswith("upload.py"):
conn = FCKeditorQuickUpload(environ)
else:
start_response ("200 Ok", [('Content-Type','text/html')])
yield "Unknown page requested: "
yield environ['SCRIPT_NAME']
return
try:
# run the connector
data = conn.doResponse()
# Start WSGI response:
start_response ("200 Ok", conn.headers)
# Send response text
yield data
except:
start_response("500 Internal Server Error",[("Content-type","text/html")])
file = StringIO()
cgitb.Hook(file = file).handle()
yield file.getvalue()
我需要这两件事一起工作修改我的 django wsgi 文件以正确服务 fckeditor 部分,或者使 apache 在单个域上正确服务 django 和 fckeditor。
I am using FCKEditor within a Django app served by Apache/mod-wsgi. I don't want to install php just for FCKEditor andI see FCKEditor offers image uploading and image browsing through Python. I just haven't found good instructions on how to set this all up.
So currently Django is running through a wsgi interface using this setup:
import os, sys
DIRNAME = os.sep.join(os.path.abspath(__file__).split(os.sep)[:-3])
sys.path.append(DIRNAME)
os.environ['DJANGO_SETTINGS_MODULE'] = 'myapp.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
In fckeditor in the editor->filemanager->connectors->py directory there is a file called wsgi.py:
from connector import FCKeditorConnector
from upload import FCKeditorQuickUpload
import cgitb
from cStringIO import StringIO
# Running from WSGI capable server (recomended)
def App(environ, start_response):
"WSGI entry point. Run the connector"
if environ['SCRIPT_NAME'].endswith("connector.py"):
conn = FCKeditorConnector(environ)
elif environ['SCRIPT_NAME'].endswith("upload.py"):
conn = FCKeditorQuickUpload(environ)
else:
start_response ("200 Ok", [('Content-Type','text/html')])
yield "Unknown page requested: "
yield environ['SCRIPT_NAME']
return
try:
# run the connector
data = conn.doResponse()
# Start WSGI response:
start_response ("200 Ok", conn.headers)
# Send response text
yield data
except:
start_response("500 Internal Server Error",[("Content-type","text/html")])
file = StringIO()
cgitb.Hook(file = file).handle()
yield file.getvalue()
I need these two things two work together by means of modifying my django wsgi file to serve the fckeditor parts correctly or make apache serve both django and fckeditor correctly on a single domain.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
介绍如何嵌入FCK编辑器并实现图片上传。
首先需要编辑fckconfig.js来更改图片上传
URL 指向服务器内的某个 URL。
这将指向服务器相对 URL 以接收上传。
FCK 将使用 CGI 变量将上传的文件发送到该处理程序
使用 multipart/form-data 编码的名称“NewFile”。 不幸的是你
必须实现 /myapp/root/imageUploader,因为我不认为
FCK 发行版的东西可以很容易地适应其他框架。
imageUploader 应该提取 NewFile 并存储它
服务器上的某个地方。
/myapp/root/imageUploader 生成的响应应该模拟
/editor/.../fckoutput.py 中构造的 HTML。
像这样的东西(whiff 模板格式)
顶部的 {{env ...}} 内容指示内容类型和
建议发送的 HTTP 标头。 fileUrl 应该是 URL
用于在服务器上查找图像。
以下是获取 html 片段的基本步骤
生成 FCK 编辑器小部件。 唯一棘手的部分是你必须把
在 os.environ 中正确识别客户端——这很丑陋
但这就是 FCK 库现在的工作方式(我提交了一个错误
报告)。
上面的内容未经测试,但它基于经过测试的下面的内容。
以下是如何使用 mod-wsgi 使用 FCK 编辑器:
从技术上讲,它使用了 WHIFF 的几个功能(请参阅
WHIFF.sourceforge.net),
-- 事实上它是 WHIFF 发行版的一部分 --
但
WHIFF 功能很容易被删除。
我不知道如何在 Django 中安装它,但是如果
Django 允许轻松安装 wsgi 应用程序,您
应该可以做到。
注意:FCK 允许客户端注入几乎任何东西
进入 HTML 页面——您将需要过滤返回值以防止邪恶
攻击。
(例如:参见whiff.middleware.TestSafeHTML中间件
如何执行此操作的示例)。
例如,请参阅此工作
http://aaron.oirt.rutgers.edu/myapp/ docs/W1500.whyIsWhiffCool。
顺便说一句:谢谢。 无论如何我需要调查一下。
This describes how to embed the FCK editor and enable image uploading.
First you need to edit fckconfig.js to change the image upload
URL to point to some URL inside your server.
This will point to the server relative URL to receive the upload.
FCK will send the uploaded file to that handler using the CGI variable
name "NewFile" encoded using multipart/form-data. Unfortunately you
will have to implement /myapp/root/imageUploader, because I don't think
the FCK distribution stuff can be easily adapted to other frameworks.
The imageUploader should extract the NewFile and store it
somewhere on the server.
The response generated by /myapp/root/imageUploader should emulate
the HTML constructed in /editor/.../fckoutput.py.
Something like this (whiff template format)
The {{env ...}} stuff at the top indicate the content type and
recommended HTTP headers to send. The fileUrl should be the Url to
use to find the image on the server.
Here are the basic steps to get the html fragment which
generates the FCK editor widget. The only tricky part is you have to put the
right client indentification into the os.environ -- it's ugly
but that's the way the FCK library works right now (I filed a bug
report).
The above is untested, but it's based on the below which is tested.
Here is how to use FCK editor using mod-wsgi:
Technically it uses a couple features of WHIFF (see
WHIFF.sourceforge.net),
-- in fact it is part of the WHIFF distribution --
but
the WHIFF features are easily removed.
I don't know how to install it in Django, but if
Django allows wsgi apps to be installed easily, you
should be able to do it.
NOTE: FCK allows the client to inject pretty much anything
into HTML pages -- you will want to filter the returned value for evil
attacks.
(eg: see whiff.middleware.TestSafeHTML middleware for
an example of how to do this).
See this working, for example, at
http://aaron.oirt.rutgers.edu/myapp/docs/W1500.whyIsWhiffCool.
btw: thanks. I needed to look into this anyway.
编辑:最终我对这个解决方案也不满意,所以我制作了一个 Django 应用程序 来照顾文件上传和浏览。
这是我在阅读 fckeditor 代码后最终组合在一起的解决方案:
Edit: Ultimately I was unhappy with this solution also so I made a Django app that takes care of the file uploads and browsing.
This is the solution I finally hacked together after reading the fckeditor code: