很久以前写的,我也不记得写的什么东西了。wsgidav是一个提供webdav服务的python库,可以用来共享文件。更多相关知识可以自行百度“什么是webdav?”。
使用示例(或者说是个本地测试)
sudo wsgidav --host=0.0.0.0 --port=80 --root=/home/lonelyor
这里的sudo是个坑,不加的话就找不到wsgidav指令,为此搞了好久诶。
wsgidav高级设置:
sudo wsgidav --config=./wsgidav.conf
引用配置文件,配置文件使用python语法来指定这些选项:
服务器选项(主机名,端口,SSL证书,...)
共享名称/ WebDAV提供程序映射列表
认证用户列表
可选的自定义DAV提供程序(即FilesystemProvider以外)
可选的自定义锁管理器,属性管理器和域控制器
高级调试选项
(和更多)
配置文件示例
#注意:这个文件是Python的语法和格式
####################################### ##########################################
WsgiDAV配置文件
#请参阅
#http : //wsgidav.readthedocs.io/en/latest/run-configure.html#
以获取配置文件格式的一些解释。
################################################## ##############################
#助手-请不要修改此节
provider_mapping = {}
user_mapping = {}
高清 addShare (SHARENAME , davProvider ):
provider_mapping [ shareName ] = davProvider
def addUser (realmName , user , password , description , roles = []):
realmName = “/” + realmName 。条(- [R “\ /” )
的UserDict = user_mapping 。setdefault (realmName , {})。setdefault (user , {})
userDict [ “password” ] = 密码
userDict [ “description”] = 描述
userDict [ “roles” ] = 角色
####################################### ##########################################
SERVER OPTIONS
#===== ================================================== ========================
#在这个WSGI服务器中运行WsgiDAV。
#支持的服务器:“cheroot”,“cherrypy-wsgiserver”,“ext_wsgiutils”,
#“flup-fcgi”,“flup-fcgi-fork”,“paste”,“wsgiref”
#“wsgiref”和“ext_wsgiutils”内置的服务器,应该*不*
生产中使用。
#所有其他服务器必须已经安装,例如`pip install cheroot`。
#(二进制发行版已经包含了'cheroot')
#默认:“cheroot”,使用命令行上的--server选项来改变它。
#server =“cheroot”
#在初始化时传递给服务器的附加参数(取决于`server`)
#例如,对于cheroot:
#server_args = {
#“numthreads”:10,
#“max”:-1,
#“request_queue_size “:5,
#”timeout“:10,
#”shutdown_timeout“:5,
#”verbose“:0,
#}
#服务器端口(默认:8080,在命令行使用--port)
port = 8080
#服务器主机名默认:localhost,
#================================================= ==============================
#启用SSL支持
#注意:
#有效的证书必须与服务器的主机名匹配,所以假的证书将
不会在所有情况下工作。
#改为创建自己的证书!
#ssl_certificate =“wsgidav / server / sample_bogo_server.crt”
#ssl_private_key =“wsgidav / server / sample_bogo_server.key”
#ssl_certificate_chain = None
#cheroot服务器支持'builtin'和'pyopenssl'(默认值:'builtin')
#ssl_adapter = pyopenssl“
#=============================================== =================================
#Misc。setings
#
#将MS-Author-Via响应头添加到OPTIONS命令,以允许
使用Microsoft Office
编辑#(默认值:False)add_header_MS_Author_Via = True
#以字节为单位的块大小
#block_size = 8192
#将此值设置为True,强制不引用PATH_INFO。这应该已经由WSGI
#Framework
完成了,所以这个设置只能用来解决那里的意外问题(见问题#8)。#unquote_path_info = False
#使用UTF-8重新编码PATH_INFO(回落到ISO-8859-1)。
#这似乎是错误的,因为每个PEP 3333 PATH_INFO始终是ISO-8859-1编码
#(请参阅https://www.python.org/dev/peps/pep-3333/#unicode-issues)。
#但是,在使用中文字符访问资源时,似乎可以解决错误
(例如,参见问题#73)。
#设置为`None`(默认),仅对Python 3启用。
#re_encode_path_info =无
#============================================= ==================================
#中间件
##
使用此部分来修改默认中间件堆栈
#from wsgidav .dir_browser import WsgiDavDirBrowser#
from debug_filter import WsgiDavDebugFilter#
from http_authenticator import HTTPAuthenticator
#from error_printer import ErrorPrinter
#middleware_stack = [WsgiDavDirBrowser,HTTPAuthenticator,ErrorPrinter,WsgiDavDebugFilter]
#================================================= ==============================
#调试
verbose = 1 #0 - 没有输出(除了应用程序例外)
#1 - 显示单一(HTTP日志记录)
#2 - 显示附加事件
#3 - 显示完整的请求/响应头信息(HTTP日志记录)
#请求正文和GET响应正文未显示
#启用特定的模块记录器
#Eg [“lock_manager”,“property_manager “,”http_authenticator“,...]
enable_loggers = []
#启用最大值。记录某些http方法
#Eg [“COPY”,“DELETE”,“GET”,“HEAD”,“LOCK”,“MOVE”,
debug_methods = []
#启用最大值。在包含某些字符串的石蕊套件测试中进行日志记录
#Eg [“lock_excl”,“notowner_modify”,“fail_cond_put_unlocked”,...]
debug_litmus = []
################## ################################################## #############
WsgiDavDirBrowser
dir_browser = {
“enable” : True , #为集合的GET请求呈现HTML列表
“response_trailer” : “” , #原始HTML代码,附加为页脚
“davmount” : 假, #发送<dm:mount>
“ms_mount” : False , #添加一个“打开为webfolder”链接(需要Windows)
“ms_sharepoint_plugin” : True , #调用MS
Offce 文档以使用WebDAV进行编辑“ms_sharepoint_urls” : False , #
Prepend'ms -word:ofe | u |” 到MS Offce
文档的URL #“app_class”:MyBrowser,
#默认值:死性不支持
wsgidav.property_manager.PropertyManager:#也可用
#wsgidav.property_manager.ShelvePropertyManager
#
#查看如何开发定制物业管理的文档。
#注意,默认的PropertyManager在内存中工作,因此不是
#持久化的。
###使用内存中的属性管理器(不是永久的)
#(这与传递'propsmanager = True'相同)
#from wsgidav.property_manager import PropertyManager
#propsmanager = PropertyManager()
###使用基于持久性架构的属性管理器
#从wsgidav.property_manager导入ShelvePropertyManager
#propsmanager = ShelvePropertyManager(“wsgidav-props.shelve”)
###使用基于持久性MongoDB的属性管理器
#from wsgidav.addons.mongo_property_manager import MongoPropertyManager
#prop_man_opts = {}
#propsmanager = MongoPropertyManager(prop_man_opts)
###使用基于持久性CouchDB属性管理器
#from wsgidav.addons.couch_property_manager import CouchPropertyManager
#prop_man_opts = {}
#propsmanager = CouchPropertyManager(prop_man_opts)
###使用内存中的属性管理器(NOT persistent)
propsmanager = True
###可选的附加动态属性修改
#注意:默认情况下,像文件大小和上次修改时间的生活属性是
#只读,但如果底层DAV提供程序
#支持
,则可以在这里覆盖。现在只有FileSystemProvider支持它,只有#更改为上次修改的时间戳。使用下面的mutable_live_props
#列表来
启用它,以允许客户端使用utime系统调用,或者例如#touch 或cp / rsync命令与挂载的
#DAV共享中
的preserve-timestamp标志一起使用。#请注意,时间戳是在实际的文件或目录中设置的,所以
即使对于内存中的属性管理器
,它也是持久的。还应该注意#可变的最后修改可能不符合RFC
4918. #mutable_live_props = [“{DAV:} getlastmodified”]
#================================================= ==============================
#锁管理器
##
取消注释此行以指定您自己的锁管理器。
#默认值:wsgidav.lock_storage.LockStorageDict
#还有:wsgidav.lock_storage.LockStorageShelve
#
#查看如何开发自定义锁管理器的文档。
#注意默认的LockStorageDict在内存中工作,因此不是
#持久化的。
#示例:使用内存中的锁存储
#(这与默认情况下传递'locksmanager = True'相同)
#from wsgidav.lock_storage import LockStorageDict
#locksmanager = LockStorageDict()
#示例:使用基于PERSISTENT架构的锁管理器
#from wsgidav.lock_storage import LockStorageShelve
#locksmanager = LockStorageShelve(“wsgidav-locks.shelve”)
##################### ################################################## ##########
SHARES
##
如果您想通过
#WsgiDAV共享文件
发布位置“/ v_root”中的文件,以便可以通过以下URL访问文件:#http :/ / /服务器:端口/文件
#插入以下行:
#addShare( “文件”, “/ v_root”)
#或者,在Windows中:
#addShare( “文件”, “C:\\ v_root”) #
#
要使用根级别共享访问相同的目录
#http:// server:港口/
#add this line:#addShare(“”,“/ v_root”)
##
上面的例子使用wsgidav.fs_dav_provider.FilesystemProvider,它是
缺省提供程序实现。
##
如果您希望使用自定义提供程序,则必须将对象作为第二个
参数
传递。看下面的例子。 ###添加一个读写文件共享:
addShare (“dav” , r “C:\ temp” )
###添加一个只读文件共享:
#from wsgidav.fs_dav_provider import FilesystemProvider
#addShare(“tmp”, FilesystemProvider(“/ tmp”,readonly = True))
###发布MySQL'world'数据库作为共享'/ world-db'
#from wsgidav.addons.mysql_dav_provider import MySQLBrowserProvider
#addShare(“world-db”,MySQLBrowserProvider(“localhost”,“root”,“test”,“world”))
###
从wsgidav.samples
发布一个虚拟结构。 virtual_dav_provider import VirtualResourceProvider #addShare(“virtres”,VirtualResourceProvider())
###发布一个Mercurial仓库
#from wsgidav.addons.hg_dav_provider import HgResourceProvider
#addShare(“hg”,HgResourceProvider(“PATH_OR_URL”))
###发布一个MongoDB
#from wsgidav.samples.mongo_dav_provider import MongoResourceProvider
#mongo_dav_opts = {}
#addShare(“mongo”,MongoResourceProvider(mongo_dav_opts))
################################################## ###############################
AUTHENTICATION
#================= ================================================== ============
#HTTP验证选项
acceptbasic = True #允许基本验证,True或False
acceptdigest = True #允许摘要验证,True或False
defaultdigest = True #True(默认摘要)或False默认基本)
#输入将被接受为授权用户的标题字段的名称。
#包括引号,例如:trusted_auth_header =“REMOTE_USER”
trusted_auth_header = 无
#================================================= ==============================
#域控制器
#取消注释此行以指定您自己的域控制器
#默认值:wsgidav.domain_controller,它采用下面的用户部分
#
#示例:
#使用域控制器,允许用户对一个认证
#Windows NT域或本地计算机。
#注意:NTDomainController需要基本身份验证:
#set acceptbasic = True,acceptdigest = False,defaultdigest = False
#from wsgidav.addons.nt_domain_controller import NTDomainController
#domaincontroller = NTDomainController(presetdomain = None,presetserver = None)
#acceptbasic = True
#acceptdigest =假
#defaultdigest = False
#============================================= ==================================
#USERS
##
此部分仅供DEFAULT域控制器使用。
#
#用户被每领域中定义的:
#ADDUSER(<境界>,<用户>,<密码>,<描述>) #
#
请注意,缺省域控制器使用共享名作为领域名称。
##
如果没有用户指定领域,则不需要认证。
#因此授予读写访问匿名!
##
注意:如果您希望使用Windows WebDAV支持(例如Windows XP的My
#网络位置),则需要将用户的域作为
#username
(注意DOUBLE斜线),例如:#addUser(“v_root”,“domain \\ user”,“password”,“description”)addUser (“” , “tester” , “secret” , “” )
ADDUSER (“” , “tester2” , “secret2” ,“” )
#addUser( “DAV”, “测试器”, “秘密”, “”)
#addUser( “DAV”, “tester2”, “secret2”,“ “)
#addUser(”virtres“,”tester“,”secret“,”“)