django - 如何在 Django 中间件中忽略媒体和静态 URL
问题描述
我正在尝试重定向无权查看该页面的用户。在我的数据库中,我保存了 url 名称。例子 -company_list
path('company/list', CompanyListView.as_view(), name='company_list'),
现在我正在使用 EXEMPT_URLS,其中保存了 url 名称,并且用户可以免除这些 url。
EXEMPT_URLS = [
'login',
'logout',
'superadmin_dashboard',
'admin_dashboard',
]
class PermissionRequiredMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
response = self.get_response(request)
return response
def process_view(self, request, view_func, view_args, view_kwargs):
assert hasattr(request, 'user')
current_url = resolve(request.path_info).url_name
print(request.path_info)
if request.user.is_authenticated and current_url not in EXEMPT_URLS :
if request.user.userprofile.user_role_id == 1:
return redirect('superadmin_dashboard')
else:
return redirect('admin_dashboard')
现在问题来了。就像我正在添加一家公司及其徽标。当我去的时候,company_list
它显示的是列表,而不是图像。
"GET /media/user_profiles/logo_L7T5FKg.png HTTP/1.1" 302
我发现了这个问题,当我评论def process_view()
它在我的模板中显示图像时。但是当我取消注释时,它不会显示图像。基本上我的中间件阻止了"GET /media/user_profiles/logo_L7T5FKg.png HTTP/1.1" 302
.
我怎么能把图片的网址名称放进去EXEMPT_URLS
解决方案
基本上,如果用户没有权限,我会重定向到仪表板。所以在我的中间件MEDIA and STATIC URL
中得到了HTTP response status code 302 Found
因为MEDIA AND STATIC URL
我的自定义中间件也在运行。所以忽略我发现request.path
。
from django.conf import settings
...
MEDIA_URL = request.path.startswith(settings.MEDIA_URL)
STATIC_URL = request.path.startswith(settings.STATIC_URL)
if request.user.is_authenticated and current_url not in EXEMPT_URLS and not MEDIA_URL and not STATIC_URL:
if request.user.userprofile.user_role_id == 1:
return redirect('superadmin_dashboard')
else:
return redirect('admin_dashboard')
推荐阅读
- amazon-web-services - 使用 AWS Gateway 长时间运行的作业 - Lambda - RDS
- mysql - mysql。8.0.19。匹配给定查询的最佳索引
- ios - dyld:库未加载用于设备的 XCFramework,但可与模拟器一起使用
- sql - 由于列“Id”,链接服务器无法插入表。用户无权写入该列
- python - 规范化 Numpy 数组
- python - 在我的 sql 连接器 python 中创建表错误
- sql - 在SQL中按某列分组后如何按日期聚合总和过滤计算?
- r - 无法在 R 中将数字转换为日期
- oracle - 为什么我收到错误消息 PLS-0382:表达式类型错误
- ios - iOS 上的 Flutter 崩溃 - io.flutter.1.ui EXC_BAD_ACCESS KERN_INVALID_ADDRESS 0x0000000000000000