2021SC@SDUSC
前面我已经对Seahub+Proset有了初步的学习,接下来我们继续进行分析。
Seahub
之前我已经对Django和React框架有了初步的学习,在此基础上我们可以对Seahub的主要部分seahub和frontend进行分析。这里我们先对seahub部分进行分析。
seahub部分主要使用的是Django框架,下面的图片展示了整体的结构:
首先我们先分析一下settings.py文件。settings.py 文件是 Django 项目的重要配置文件。项目启动时,settings.py 配置文件会被自动调用,而它定义的一些全局为 Django 运行提供参数,在此配置文件中也可以自定义一些变量,用于全局作用域的数据传递。下面我们开始分析。
# Copyright (c) 2012-2016 Seafile Ltd.
# -*- coding: utf-8 -*-
# Django settings for seahub project.
import sys
import os
import re
from seaserv import FILE_SERVER_ROOT, FILE_SERVER_PORT, SERVICE_URL
这是settings.py文件需要加载的各个模块。
PROJECT_ROOT = os.path.join(os.path.dirname(__file__), os.pardir)
这行代码可以确定项目的父目录。
__file__
是 Python 的语法,显示当前文件的位置;os.path.dirname(__file__)则是返回文件路径;os.pardir是获取当前目录的父目录;os.path.join()可以将两个或更多的路径名连接起来。本文件也包含了许多重要文件的路径。
DEBUG = False
用于配置 Django 项目的启用模式,有两种取值方式:
DEBUG = True用于在开发环境中使用,属于调试模式,在项目的运行过程中会暴露一些错误信息以方便调试;DEBUG = False用于线上环境,表示不启用调试模式。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
'NAME': '%s/seahub/seahub.db' % PROJECT_ROOT, # Or path to database file if using sqlite3.
'USER': '', # Not used with sqlite3.
'PASSWORD': '', # Not used with sqlite3.
'HOST': '', # Set to empty string for localhost. Not used with sqlite3.
'PORT': '', # Set to empty string for default. Not used with sqlite3.
}
}
它用于指定数据库配置信息,这里默认配置的是 Django 自带的 sqllite3 数据库。Django 支持多种数据库,在这个字典变量中更改数据库配置。
TIME_ZONE = 'UTC'
设置时区。
LANGUAGE_CODE = 'en'
设置语言。
MIDDLEWARE = [
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'seahub.auth.middleware.AuthenticationMiddleware',
'seahub.base.middleware.BaseMiddleware',
'seahub.base.middleware.InfobarMiddleware',
'seahub.password_session.middleware.CheckPasswordHash',
'seahub.base.middleware.ForcePasswdChangeMiddleware',
'termsandconditions.middleware.TermsAndConditionsRedirectMiddleware',
'seahub.two_factor.middleware.OTPMiddleware',
'seahub.two_factor.middleware.ForceTwoFactorAuthMiddleware',
'seahub.trusted_ip.middleware.LimitIpMiddleware'
]
它用于注册中间件。所谓中间件就是从用户请求到用户请求结束期间所做的操作,即用户的请求会次从上到下依次执行MIDDLEWARE中的配置,然后服务器响应用户的时候会再次从下至上依次执行。Django 默认加载了一些中间件,例如,用于处理会话的 SessionMiddleware 等,同样我们可以对这些中间件进行添加或者注释。
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
os.path.join(PROJECT_ROOT, '../../seahub-data/custom/templates'),
os.path.join(PROJECT_ROOT, 'seahub/templates'),
],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.i18n',
'django.template.context_processors.media',
'django.template.context_processors.static',
'django.template.context_processors.request',
'django.contrib.messages.context_processors.messages',
'seahub.auth.context_processors.auth',
'seahub.base.context_processors.base',
'seahub.base.context_processors.debug',
],
},
},
]
它用于指定模板的配置信息。里面BACKEND是Django内置的模板;DIR是本地的templates的路径;APP_DIRS是本地应用的路径,True表示默认的方式。OPTIONS包含特定于后端的设置。
INSTALLED_APPS = [
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# In order to overide command `createsuperuser`, base app *must* before auth app.
# ref: https://docs.djangoproject.com/en/1.11/howto/custom-management-commands/#overriding-commands
'seahub.base',
'django.contrib.auth',
'registration',
'captcha',
'statici18n',
'constance',
'constance.backends.database',
'termsandconditions',
'webpack_loader',
'seahub.api2',
'seahub.avatar',
'seahub.contacts',
'seahub.drafts',
'seahub.institutions',
'seahub.invitations',
'seahub.wiki',
'seahub.group',
'seahub.notifications',
'seahub.options',
'seahub.onlyoffice',
'seahub.profile',
'seahub.share',
'seahub.help',
'seahub.thumbnail',
'seahub.password_session',
'seahub.admin_log',
'seahub.wopi',
'seahub.tags',
'seahub.revision_tag',
'seahub.two_factor',
'seahub.role_permissions',
'seahub.trusted_ip',
'seahub.repo_tags',
'seahub.file_tags',
'seahub.related_files',
'seahub.work_weixin',
'seahub.file_participants',
'seahub.repo_api_tokens',
'seahub.abuse_reports',
'seahub.repo_auto_delete',
'seahub.ocm',
]
这个参数是指当前项目中用来安装的应用(APP)的列表,Django 把默认自带的应用放在这个列表里。INSTALLED_APPS 这个设置告诉Django哪些app是启用的。我们也可以根据自己的项目需求对其进行增加或删除。
settings.py文件的基本配置我们已经分析完毕。之后我会继续对seahub的其他部分以及proset进行分析。