[英]How to make a python regex?
我正在為Django開發loginMiddleware類。 該中間件類必須在未登錄時將用戶發送到登錄頁面。 但是也有一些例外。
因為我運行內置的django服務器,所以必須制作一個媒體URL。 但是知道的問題是,當登錄頁面加載一個javascript文件時,該javascript文件就是登錄頁面,因為用戶沒有登錄。 因此,我發表了聲明:
from django.http import HttpResponseRedirect
from django.conf import settings
import re
class loginMiddelware:
def process_request(self,request):
if request.path != settings.LOGIN_PATH and request.user.is_anonymous():
if request.path.find('media') <= 0:
return HttpResponseRedirect(settings.LOGIN_PATH)
else:
return None
我的意思是:if request.path.find('media')<= 0:。 它有效,但是我覺得這不是一個好方法。 我認為我必須為此使用正則表達式。 因此我查看了re.match函數,並嘗試了不同的想法,但沒有任何效果。 我想要一個正則表達式,它只允許以/ media /開頭並以下一個擴展名之一結尾的al url:js,css,png,gif或jpg。
這怎么可能?
謝謝!
湯姆
當然:
DIRECT_ACCESS = re.compile(r'^/media/.*\.(js|css|png|gif|jpg)$')
...
if DIRECT_ACCESS.match(url):
...
提示:如果要確保您的正則表達式正常工作,請編寫幾個執行它的單元測試。 這樣,您就不會有任何令人討厭的驚喜。
您不需要正則表達式:
if request.path.startswith('/path/to/your/media'):
#do something
應該可以。 您抱怨的事實是,如果請求路徑包含:
/protected/secure/media/bla
您的努力將使用戶通過。
因此,使用帶字符串方法startswith
的絕對路徑就足以解決您的問題。
看看Matt Grayson的Require Login Middleware 。 它使您可以定義一堆不需要使用自定義LOGIN_REQUIRED_URLS_EXCEPTIONS
設置登錄的URL。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.