发布于 2014-12-31 10:26:38 | 386 次阅读 | 评论: 0 | 来源: PHPERZ

这里有新鲜出炉的Django 入门教程,程序狗速度看过来!

Django Python WEB开发框架

Django是一个开放源代码的Web应用框架,由Python写成。采用了MVC的软件设计模式,即模型M,视图V和控制器C。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是CMS(内容管理系统)软件。并于2005年7月在BSD许可证下发布。这套框架是以比利时的吉普赛爵士吉他手Django Reinhardt来命名的。


本文为大家讲解的是Django 处理静态缓存文件的方法,感兴趣的同学参考下。

基础

作为基础,首先当然是要修改settings.py中的设置,主要是要修改以下内容

import os, socket
BASE_DIR = os.path.dirname(os.path.dirname(__file__))

# many many other settings

# 静态文件在生产环境中的存储位置
STATIC_ROOT = '/var/www/yoursite/static/'

# 静态文件的URL
STATIC_URL = '/static/'

# Django 应该在哪些位置寻找静态文件
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "static"),
)

# 静态文件收集引擎,如果静态文件与Django在同一台服务器上,则不用设置
# 此时将使用默认引擎将静态文件收集到STATIC_ROOT中
STATIC_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'

然后确认在settings.py中的INSTALLED_APPS中有配置项

'django.contrib.staticfiles',

那如何在模版中使用这些静态文件呢?参考如下代码,其中语句{% load static from staticfiles %}在这个模版文件中只需要出现一次。

{% load static from staticfiles %}
<link href="{% static "css/sample.css" %}" rel="stylesheet">

用下边的方法也可

{% load static from staticfiles %}
{% static "css/sample.css" as sample %}
<link href="{{ sample }}" rel="stylesheet">
Django在运行时会自动将这些文件映射到STATIC_URL所给定的值下。也就是如,如果STATIC_URL = '/static/',那么在运行时,上边模版中的样例中的url会被替换为/static/css/sample.css

注1:其实将静态文件路径硬编码在模版中也可以正常运行,如使用href="/static/css/sample.css",前提是配置好了STATIC_URLSTATIC_DIRS。但并不推荐这么做,因为如果后来静态资源的位置发生了迁移,如使用独立服务器或者使用CDN,就要修改一大堆URL。而使用推荐的方法可以避免这个庞大的工作量,最多只需要修改STATIC_URL即可。

注2:如果css文件中也使用了静态文件如css背景,则按照相对路径使用即可,因为浏览器解析css是会自动按照相对路径寻找到正确的URL。

使用Django所在服务器提供静态文件

在开发阶段,Django使用的是内建的一个静态文件服务器,虽然在生产环境中也可以使用,但是它既不稳定也不安全。更好的方式是使用提供web服务的服务器如apache来服务静态文件。

首先上传代码到服务器,然后运行collectstatic命令

# python manage.py collectstatic

然后配置web服务器来为静态文件服务,如对Apache2进行配置

Alias /robots.txt /var/www/mysite/static/robots.txt
Alias /favicon.ico /var/www/mysite/static/favicon.ico

Alias /media/ /var/www/mysite/media/
Alias /static/ /var/www/mysite/static/

<Directory /var/www/mysite/static>
Require all granted
</Directory>

<Directory /var/www/mysite/media>
Require all granted
</Directory>

WSGIScriptAlias / /var/www/mysite/mysite/wsgi.py
WSGIPythonPath /var/www/mysite

<Directory /var/www/mysite/mysite>
<Files wsgi.py>
Require all granted
</Files>
</Directory>

注意:如果使用的是2.4以前的Apache版本,那么需要将Require all granted修改如下,且注意denyallow之间没有空格!!!

Order deny,allow
Allow from all

在专用的服务器上提供静态文件

与上边基本相同,由于是另一台机器,因此可以使用其他的web服务器如nginx等。

首先上传代码到Django所在的服务器并执行collectstatic命令,将静态文件收集到Django所在服务器上的目录STATIC_ROOT中,然后拷贝这些静态文件到专用服务器上,配置专用服务器使其能够提供静态文件服务。可以考虑使用rsync来进行拷贝,因为它仅仅会传输发生改动的那些字节。

另外,因为静态文件迁移到了另一台服务器上,所以可能需要修正STATIC_URL,同时重新配置web服务器。

当然,这个过车也可以使用脚本自动完成,如使用Fabric.

使用云存储服务或者CDN

如果使用云存储或者CDN,有两种方法可以提供静态文件。

第一种类似在专用的服务器上提供静态文件,只是才拷贝文件的时候是拷贝到相应的云服务或者CDN上。

第二种方法,如果第三方云存储服务或者CDN提供了API,可以动手实现一个静态文件收集引擎,那么运行collectstatic命令时会自动将静态文件收集到第三方存储中,过程也就变得更简单。



相关阅读 :
Django 处理静态文件方法
django中静态文件配置方法
docker中部署django项目-静态文件访问
python django 访问静态文件出现404或500错误
Django 静态文件处理
Django框架中调用方法和处理无效变量
在Django的通用视图中处理Context的方法
Django 静态文件
Django中Signal使用方法
python Django模板的使用方法
Python GAE、Django导出Excel的方法
详解Python的Django框架中Manager方法的使用
最新网友评论  共有(0)条评论 发布评论 返回顶部

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务