django整体文件结构、配置文件详解

前言:

       前文介绍了django及pycharm的安装配置,后续开始说明django的详细配置及编写方式,本文主要说明django的配置文件设置,会结合实际问题及使用场景进行说明,本文中只介绍常用的及一些可能出现问题需要特殊配置的应用场景。因为django的文件结构比较简单不用单开一个文章,因此直接放在本文中进行说明。

一、django文件结构

       django的文件结构很简单,随意搜索都可以找到,因此简单的放在这里说明一下,假设项目的民资就是djangotest其目录如下:
       |-djangotest

       |--djangotest

       |---_init_.py #初始化

       |---settings.py #配置文件

       |---urls.py #路由配置文件

       |---wsgi.py #wsgix协议

       |--templates #模板文件路径即html文件放在这里

       |--venv #某些直接安装的第三方库保存路径,无需管理不是重点

       |--db.sqlite3 #自带sqlite数据库

       |--manage.py #命令执行文件

       |--requirements.txt #自主生成的包含第三方模块文件,前一篇中已经说明如何生成及作用

       |--apps  #具体实现功能的app,可有多个并且以上文件及路径共享

       |---_init_.py #初始化

       |---admin.py  

       |---apps.py 

       |---views.py #视图文件,自动生成的,也可以自己写,但最好用该文件名

       以上就是django一个项目的文件结构,通常比较关注的就是settings.py、urls.py、templates、views.py。而且从文件结构上也能看出django是MVT的模式,即Model-Views-Templates。

二、django配置文件详解

       要想一个django项目按照我们的想法运行起来,那么首先就要对django的配置文件进行设置,使用默认配置是可以跑起来的但是有些功能并不可以按我的需求进行,下面结合实际场景详细介绍settings.py说明使用该配置的原因。主要包括1、ALLOWED_HOSTS配置;2、INSTALLED_APPS配置;3、MIDDLEWARE简单说明;4、时区设置;5、SESSION设置;6、DEBUG配置;7、staic相关路径设置(静态资源配置)。

1、ALLOWED_HOSTS配置

        这个配置很简单,他的主要意义是拦截未授权的IP,即未配置IP的客户端无法访问服务,如果想要任意客户端访问服务将其配置为ALLOWED_HOSTS = ['*',]即可。该功能的另一个应用场景便是当某个服务是专门为内网人员使用的时候,可以用该设置限制外网访问。

2、INSTALLED_APPS配置 

       注册应用,凡是app都需要注册到该选项下,一些第三方app尤其是要是用路由的也需要注册到该选项下,例如验证码模块captcha、高级富文本编辑器DjangoUeditor等等。

3、MIDDLEWARE简单说明

       MIDDLEWARE主要是Django提供的一些中间件,这里主要说明的是django.middleware.csrf.CsrfViewMiddleware这个中间件,它是django实现防止跨站请求伪造的功能,默认开启,此时若要提交表单需要在表单第一行加上{% csrf_tocken %}进行验证,或者将提交接收函数加上装饰器来局部取消这一功能,@csrf_exempt取消当前函数防跨站请求伪造功能。

        如果不需要该功能将其注释掉即可,并且在不启用该功能的情况下,也可以对接收函数局部启用,同样是在函数前添加装饰器,@csrf_protect为当前函数强制设置防跨站请求伪造功能。

        因此django.middleware.csrf.CsrfViewMiddleware为全局设置,开启时,可以使用@csrf_exempt将特定函数该功能关闭;全局关闭时,可以使用@csrf_protect将特定函数该功能强制开启。还是比较有用的安全功能,建议开启。

       注意不了解什么是装饰器的请查阅相关python基础。

4、时区设置

       在服务中不可避免的要使用到时间,比如用户注册时间,登录时间,固定时间的定时任务,直接使用默认的时区设置会发现时间比北京时间晚了8小时,这是因为django默认的时区是美国,如果是在中国,请将时区设为亚洲/上海,请注意不是北京,没有北京时间这一选项,亚洲中国时区django是以上海来表示的,请不要自己臆想来添加配置。修改或添加如下选项:                          TIME_ZONE = 'Asia/Shanghai'

       USE_TZ = False

5、SESSION设置

       有时服务需要记住一些用户的登录信息,以方便用户免密登录或者记录用户的登录状态、用户级别等等。这时就要使用session和cookie来记录这些信息,其区别就是session是保存在服务器的,cookie是保存在浏览器的,在发送请求时会一起发送过来,当然安全性上肯定的session更好,很难篡改,但是有一些功能也更适用于cookie,因此一般配合使用。因为设置比较简单这里就说一下session的设置,cookie设置可以参考session即可。

      在使用时,要考虑到用户的登录环境安全性,例如用户在网吧或是其他非常用环境登录,session在用户注销前一直有效,那么如果用户离开时忘记注销,那将是一件非常危险的事情,如果不设置过期时间,用户离开时忘记关闭浏览器也有很大可能导致用户信息泄露甚至财产损失。因此django的session有三个非常重要的设置即

      A:SESSION_EXPIRE_AT_BROWSER_CLOSE是否在浏览器关闭时清空session,设为True即为启用。

      B:SESSION_COOKIE_AGE session的过期时间,默认为两周,单位为秒,根据需要设置,可以写一个整数,也可以用表达式代替,建议使用表达式代替例如要设置过期时间为一天,那么可以写成SESSION_COOKIE_AGE=24*60*60,简单明了,一眼就能分辨出来,方便维护和修改,也为后续可能的源码交接提供便利。

     C:SESSION_SAVE_EVERY_REQUEST是否每次请求都保存session内容,设为True即为启用,根据实际情况进行设置,比如session保存了用户会员级别,在充值后提升,这样的情况是可以启用的,但是启用会在一定程度上影响性能。

6、DEBUG配置

       DEBUG设置为True时,当路由或函数出错时,会将相应的错误信息显示在浏览器上,对于调试是非常有帮助的,但是如果生产环境也这么配置,那就会导致服务安全受到威胁,在DEBUG为True时,浏览器输入任何未设置的路由会将已设置的所有路由即url全部暴露出来,甚至可以通过试错来获取到服务的部分源代码进行分析,为不法分子攻击服务减小难度。因此请注意在生产环境中,不是建议是禁止将DEBUG设置为True一定要设置为False,如果出错django只会返回404页面,不会返回具体的错误。

        DEBUG设置为True时,django我自动帮助用户分配静态资源路由,当改为False时,该功能不再生效,这就导致了服务一些静态资源例如图片,CSS文件,JS文件等在未配置静态资源路由的情况下不会生效,这就导致了DEBUG设置前后html页面展现出现问题的情况。

        下面就说明一下django的静态资源配置。

7、静态资源配置

       静态资源配置的主要目的是让浏览器通过特定的路由,访问到你放在特定文件路径下的文件。因此我们需要两个设置1、特定的路由;2、存放文件的路径。并将以上两个设置结合起来。

       django中有两个资源配置,一个是static静态资源配置,一个是media多媒体资源配置,其配置方式相同,着重说明static,media照着配置即可。

       静态资源路由配置为STATIC_URL,根目录配置为STATIC_ROOT,一般我们将路由配置为STATIC_URL="/static/",静态资源的根目录与之对应STATIC_ROOT=os.path.join(BASE_DIR, 'static'),特定路径就是BASE_DIR(项目根目录)/static,当然也可以写成自己习惯的形式,将static改成别的,STATIC_URL、STATIC_ROOT文件夹名称要同时改,但是不建议这样做。假设本机访问此时浏览器通过127.0.0.1/static/文件名 访问所需要的文件,media配置同上。

       当然为了服务的方便维护,结构清晰,是不可能将css,js,文本及图片都放在一个文件夹里,肯定要在静态资源路径BASE_DIR/static下分开存放,例如在static下创建路径css,此时通过127.0.0.1/static/css/文件名是无法访问文件的,就要在STATICFILES_DIRS选项下进行配置,添加('css', os.path.join(STATIC_ROOT, 'css').replace('\\', '/'))。因此完整代码如下:

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

STATICFILES_DIRS = (
    ('css', os.path.join(STATIC_ROOT, 'css').replace('\\', '/')),
    ('js', os.path.join(STATIC_ROOT, 'js').replace('\\', '/')),
    ('images', os.path.join(STATIC_ROOT, 'images').replace('\\', '/')),
)

static其实也是一个url,只不过在DEBUG=True时,django自动实现了,在服务中推荐将静态资源采用nginx将其配置到文件服务器中,这部分会在网站整体开发模块中进行说明,本文只说明在DEBUG=False时,django如何配置静态资源路由,在urls.py中

添加如下代码即可:

from django.views import static
from django.conf import settings

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^static/(?P<path>.*)$', static.serve, {'document_root': settings.STATIC_ROOT }, name='static'),
]

在模板即html中引用静态资源使用django的模板语言,与vue.js相似如下:

<img src="{% static 'images/login.jpg' %}"/>

具体使用方式会在django模板语言中进行说明。注意上述的static是关键字,不能修改,千万不要把其与STATIC_URL和STATIC_ROOT中的'static'搞混。

结语:

       django的settings.py 配置就完成了,下一篇将介绍django的路由配置即url配置。

        https://www.yuntaoz.cn这个网站是我用django开发的示例网站,大家有问题可以在csdn留言给我,比如看网站对哪个功能感兴趣想了解是怎么做的,都可以留言询问,也可以私信,有必要的话我也会单开一个专栏写。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值