使用动态Python文件为网页生成CSS是否有缺点?我希望带有管理员cookie的计算机能够显示特殊的管理面板CSS,并为所有其他用户显示常规CSS。我打算用:
<link rel="stylesheet" href="/css.py" type="text/css" />
答案 0 :(得分:9)
这应该可以正常工作。
我希望,但是,您并不仅仅依靠CSS来限制管理功能。
答案 1 :(得分:6)
你可以做到这一点。只要意识到每个页面都会有性能损失。 CSS文件通常是缓存的,因为它们不会经常更改。
理论上,您甚至不需要使用<link>
,因为您可以在页面中将样式作为<style>
呈现,因为每次页面请求都会刷新样式。
答案 2 :(得分:4)
这可能不值得。如果有很多特定于管理面板的CSS,那么如果以管理员身份登录,则只需要第二个<link>
元素,否则只需将其与主文件合并。
答案 3 :(得分:1)
扩展无关紧要。如果您愿意,可以在.jpg
结束。什么 (某种程度上)重要的是标题。您应该发送以下标题:
Content-Type: text/css; charset=UTF-8
但是,如果你不添加它,你将不会遇到任何(直接)问题。只要您在HTML中使用type="text/css"
,浏览器就会知道您在说什么。
请注意,正如 Glennular 所说,CSS文件是缓存的。因此,您可能希望使用以下内容:
<link rel="stylesheet" href="/css.py?SOME_RANDOM_SEED" type="text/css" />
SOME_RANDOM_SEED
显然是一个随机字符序列。您可以使用time.time()
或uuid.uuid4()
或类似内容。
答案 4 :(得分:0)
使用动态文件的缺点是它不会像静态文件那么快。很可能,这不是一个真正的问题(差异可能是微不足道的)。如果它后来证明这是一个问题,你可以预先计算不同的CSS并链接到适当的。
在一个不相关的说明中,信任cookie以确定用户是否是管理员是不安全的。
答案 5 :(得分:0)
如果Web浏览器可以访问www.example.com/css.py并生成有效的CSS,那么它应该可以正常工作,至少用php可以。
也许你只需要传递content-type: text/css
HTTP标头
但是我认为你可以在HTML页面生成中设置特殊的类,以防这个cookie存在并让静态css处理它们,但是如果你真的需要这样做,我认为除了更多的处理时间之外没有别的缺点
答案 6 :(得分:0)
虽然现在使用动态创建的CSS可以工作,但我担心你不能依赖它来改变它。
CSS文件的缓存比页面本身更大,因此即使您尝试阻止缓存文件,某些浏览器也可能会比旧版本更长时间地保留旧版本。
因此,如果您正在考虑使用CSS根据cookie显示或隐藏功能,那么这不是一个稳定的解决方案。
答案 7 :(得分:0)
主要缺点是大多数缓存系统(客户端浏览器缓存和服务器端缓存系统)都假设CSS是静态的,因此可能会缓存CSS文件的第一次调用(css.py),然后不会再次更新。
如果您使用随机种子,正如@Felix建议的那样,您的文件将不会被缓存(因此您的解决方案将按预期工作),但是您的文件将不会被缓存(因此您将失去性能优势)。也就是说,将随机生成的(例如时间戳)查询字符串添加到CSS文件名中(例如css.py?201309102358)。
为了两全其美(动态CSS的动态CSS +缓存),你可以像Bryan Headrick所描述的那样进行Apache URL rewrite。简而言之,他的解决方案涉及使用看起来合法的CSS文件名,但参数作为名称的一部分,例如“white-2.css”,其中“white”表示具有白色背景的主题,“2”表示双列格式。 Apache重写会将格式为“ _ -_。css”的任何URL转换为动态文件名,例如“dynamiccss.py?background=white&columns=2”。缓存代理(客户端浏览器缓存和服务器端缓存)只会看到“white-2.css”版本,因此会正常缓存它。只有Apache才会看到并重定向dynamiccss.py版本,该版本接收必要的参数以实现其魔力。 Bryan Headrick的解释使用PHP和Apache,但逻辑应该适用于任何服务器端脚本语言(例如Python)和Web服务器。