我正在为 Django 开发一个 loginMiddleware 类。这个中间件类必须在未登录时将用户发送到登录页面。但也有一些异常(exception)。
因为我运行内置的 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/开头并以下一个扩展之一结尾的所有 url:js、css、png、gif 或 jpg。
这怎么可能?
谢谢!
汤姆
请您参考如下方法:
当然:
DIRECT_ACCESS = re.compile(r'^/media/.*\.(js|css|png|gif|jpg)$')
...
if DIRECT_ACCESS.match(url):
...
提示:如果您想确保您的正则表达式有效,请编写几个单元测试来执行它。这样,您就不会遇到任何令人讨厌的意外。
