簡體   English   中英

如何制作python正則表達式?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM