Вы можете использовать регулярные выражения, такие как
function foo (path) {
if (/^\/events\/[^\/]+$/.test(path)) {
// matches any string starting with /events/
// plus at least one character that is not another / before the end
console.log('matched');
} else {
console.log('did not match');
}
}
foo('/events/123456');
// 'matched'
foo('/events/123456/image');
// 'did not match'
foo('/events/'); // bonus
// 'did not match'
foo('/events/123456/'); // but note this tricky one
// 'did not match'
// if you also want to accept '/events/123456/' you could change it to
const betterRegex = /^\/events\/[^\/]+\/?$/;
console.log(betterRegex.test('/events/123456/'));
// true
console.log(betterRegex.test('/events/123456/images'));
// false
// plus you can capture the ID by adding a capture group with ()
const id = /^\/events\/([^\/]+)\/?$/.exec('/events/123456')[1]
console.log(id) // '123456'
Но если у вас много маршрутов, я бы порекомендовал использовать что-то например, express.js, потому что это значительно облегчает работу с ними.
Я полагаю, что Вы могли использовать Скрученный для реализации FTPS путем простого использования его реализации FTP, но изменения FTPClient.connectFactory
атрибут, чтобы быть функцией, которая делает что-то с connectSSL
вместо connectTCP
.
Вы уверены, что хотите FTPS хотя? SFTP является другим, лучше, и намного более популярным протоколом в эти дни: Скрученный содержит реализацию SFTP также.
M2Cypto имеет модуль FTPS. Из документации:
>>> from M2Crypto import ftpslib
>>> f = ftpslib.FTP_TLS()
>>> f.connect('', 9021)
'220 spinnaker.dyndns.org M2Crypto (Medusa) FTP/TLS server v0.07 ready.'
>>> f.auth_tls()
>>> f.set_pasv(0)
>>> f.login('ftp', 'ngps@')
'230 Ok.'
>>> f.retrlines('LIST')
-rw-rw-r-- 1 0 198 2326 Jul 3 1996 apache_pb.gif
drwxrwxr-x 7 0 198 1536 Oct 10 2000 manual
drwxrwxr-x 2 0 198 512 Oct 31 2000 modpy
drwxrwxr-x 2 0 198 512 Oct 31 2000 bobo
drwxr-xr-x 2 0 198 14336 May 28 15:54 postgresql
drwxr-xr-x 4 100 198 512 May 16 17:19 home
drwxr-xr-x 7 100 100 3584 Sep 23 2000 openacs
drwxr-xr-x 10 0 0 512 Aug 5 2000 python1.5
-rw-r--r-- 1 100 198 326 Jul 29 03:29 index.html
drwxr-xr-x 12 0 0 512 May 31 17:08 python2.1
'226 Transfer complete'
>>> f.quit()
'221 Goodbye.'
>>>
С другой стороны, если бы Вы хотели минимизировать использование сторонних модулей, то необходимо смочь разделить ftplib стандартной библиотеки на подклассы. Класс FTP со встроенным (к Python) поддержка SSL. M2Crypto (или Скрученный, если Вы хотите пойти тем путем) является более легким решением, все же.
Скрученный, кажется, имеет некоторую реализацию FTPS (FTP по SSL) под подпроектом раковины. Я не скрученный эксперт, но Глиф, сам скрученный человек, перечислен в этом сайте. Возможно, следующим его ответ на другой вопрос, можно найти больше деталей (удача).
Я не попробовал его сам (да, я просто использовал Google и перешел по некоторым ссылкам), но http://www.lag.net/paramiko/, кажется, рекомендуемое решение. От поверхностного взгляда это - реализация SSH в чистом Python, который позволяет туннелировать для вещей как FTP.
Обновление: комментатор указал, что я перепутал sftp и ftps, извините. Я все еще предлагаю, по крайней мере, исследовать Paramiko кратко, чтобы видеть, соответствует ли это требованиям.
Я не мог найти свободный sftp клиент для окон, таким образом, я закончил тем, что перенес PSFTP Шпаклевки использование модуля подпроцесса Python. Я, вероятно, использовал бы скрученную реализацию, упомянутую Глифом, если бы я знал об этом.
Так или иначе, если Ваше заинтересованное это доступно в:
Что касается реализации сервера, вы можете взглянуть на pyftpdlib: http://code.google.com/p / pyftpdlib / Он включает демонстрационный скрипт, реализующий работающий сервер FTPS: http://code.google.com/p/pyftpdlib/source/browse/trunk/ demo / tls_ftpd.py
Что касается реализации клиента, я предоставил патч, который будет включен в python 2.7 и 3.2. http://bugs.python.org/issue2054