如何制作python正则表达式?

2024-07-03 01:32:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为Django开发一个loginMiddleware类。此中间件类必须在未登录时将用户发送到登录页。但也有一些例外。在

因为我在django服务器中运行构建,所以我必须创建一个媒体url。但是,当登录页面加载javascript文件时,javascript文件就是loginpage,因为用户没有登录。因为这个原因,我发表了一个声明:

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

我是说如果请求.路径.查找('media')<;=0:。这很管用,但我觉得这不是一个好方法。我想我必须使用正则表达式。所以我看着重新匹配功能,并尝试了不同的想法,但没有任何效果。我想要一个regex,它只允许所有url以/media/开头,以下一个扩展名之一结束:js、css、png、gif或jpg。在

这怎么可能?在

谢谢!在

汤姆


Tags: 文件pathdjango用户fromimporturlif
3条回答

看看马特格雷森的Require Login Middleware。它允许您定义一组不需要使用自定义的LOGIN_REQUIRED_URLS_EXCEPTIONS设置登录的url。在

您不需要正则表达式:

if request.path.startswith('/path/to/your/media'):
    #do something

应该会成功的。您抱怨的是,如果请求路径包含:

^{pr2}$

你的实现会让用户通过。在

因此,使用字符串方法startswith的绝对路径就足够解决您的问题了。在

当然可以:

DIRECT_ACCESS = re.compile(r'^/media/.*\.(js|css|png|gif|jpg)$')

...

if DIRECT_ACCESS.match(url):
    ...

提示:如果要确保regexp正常工作,请编写两个执行它的单元测试。这样,你就不会得到任何令人讨厌的惊喜。在

相关问题 更多 >