fix compatibility to IE and deployment with nginx and uWSGI

This commit is contained in:
unknown
2018-01-18 17:47:50 +08:00
parent 4d212131de
commit dd651e45f2
25 changed files with 479 additions and 135 deletions
@@ -28,7 +28,8 @@ INSTALLED_APPS = [
'corsheaders',
'rest_framework.authtoken',
'captcha',
'favicon'
'favicon',
'raven.contrib.django.raven_compat',
]
# 作用于全局的中间件,一个Request进来会从上到下调用各个中间件的process_request()方法,再传给具体的View,得到的Response从下到上调用各个中间件的process_response()方法
@@ -104,24 +105,6 @@ STATICFILES_DIRS = (os.path.join(BASE_DIR, "static"),)
MEDIA_URL = "/media/"
MEDIA_ROOT = os.path.join(BASE_DIR, "media")
'''
非Django原生setting项,仅用于REST-Framework
'''
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_jwt.authentication.JSONWebTokenAuthentication', # JSON Web Token Authentication
),
# 设置限速策略,防止爬虫拖垮网站(仅作用于设置了throttle_classes的ViewSet
'DEFAULT_THROTTLE_CLASSES': (
'rest_framework.throttling.AnonRateThrottle',
'rest_framework.throttling.UserRateThrottle'
),
'DEFAULT_THROTTLE_RATES': {
'anon': '1000/minute', # 对于未登录用户,每分钟最多访问4次
'user': '1200/minute' # 对于已登录用户,每分钟最多访问6次
}
}
'''
非Django原生setting项,仅用于REST-Framework-JWT
'''
@@ -136,4 +119,27 @@ JWT_AUTH = {
'''
REST_FRAMEWORK_EXTENSIONS = {
'DEFAULT_CACHE_RESPONSE_TIMEOUT': 15 * 60, # 设置缓存有效时间
}
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'console': { # Log to stdout
'level': 'INFO',
'class': 'logging.StreamHandler',
},
'file': {
'level': 'DEBUG',
'class': 'logging.FileHandler',
'filename': os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))), 'logs', 'django-logging.txt'),
},
},
'loggers': {
'django.request': {
'handlers': ['file'],
'level': 'INFO',
'propagate': True,
},
},
}
@@ -14,4 +14,6 @@ if CONFIG_ENV == 'local':
elif CONFIG_ENV == 'remote':
from setting_split.remote import *
elif CONFIG_ENV == 'initial':
from setting_split.initial import *
from setting_split.initial import *
import os
+7 -4
View File
@@ -2,7 +2,7 @@
__author__ = 'HymanLu'
from django.conf.urls import url, include
from APP_Inventor_case_base.settings import MEDIA_ROOT
from APP_Inventor_case_base.settings import MEDIA_ROOT, DEBUG
from django.views.static import serve
from rest_framework.documentation import include_docs_urls
from rest_framework.routers import DefaultRouter
@@ -12,7 +12,6 @@ from cases.views import CasesListViewSet, CategoryViewset, HotSearchsViewset, Ba
from questions.views import QuestionsListViewSet
from users.views import UserViewset, PictureCodeView
from user_operation.views import UserFavViewset
from django.views.generic import TemplateView
from utils.file_views import UploadFileView, DeleteFileView
router = DefaultRouter() # 利用了ViewSet的重载as_view()方法进行请求方法和处理函数的动态绑定(简单好用,只需要逐一register,然后urls函数即可)
@@ -32,9 +31,13 @@ urlpatterns = [
url(r'^hotcategory/', HotCategoryView.as_view()), # 获取案例数量最多的若干个案例类型
url(r'^picturecodes/', PictureCodeView.as_view(), name='picturecodes'), # 获取验证码图片
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')), # 默认的通过账号和密码进行验证的方式(login和logout方法)
url(r'^media/(?P<path>.*)$', serve, {"document_root": MEDIA_ROOT}), # path 将作为第二参数传到server进行处理
url(r'docs/', include_docs_urls(title="APP Inventor案例库")), # 自动生成的API说明文档
url(r'^api-token-auth/', views.obtain_auth_token), # drf自带的token认证模式(一般称为Session模式)
url(r'^login/', obtain_jwt_token), # jwt的认证接口(较之drf自带的认证模式,占用的服务器端资源更少,安全性更高)
url(r'^captcha/', include('captcha.urls')), # django-simple-captcha模块用于获取图片的URL
]
]
if DEBUG:
urlpatterns = urlpatterns.extend([
url(r'^media/(?P<path>.*)$', serve, {"document_root": MEDIA_ROOT}), # path 将作为第二参数传到server进行处理
])
+1 -1
View File
@@ -5,6 +5,6 @@ import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "drf_vue_website.settings")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "APP_Inventor_case_base.settings")
application = get_wsgi_application()
+1 -1
View File
@@ -4,7 +4,7 @@ __author__ = 'HymanLu'
import os
import sys
# 常用参数:makemigrations、migrate、runserver 0.0.0.0:8000、startapp
# 常用参数:makemigrations、migrate、runserver 0.0.0.0:8000、startapp、raven test
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "APP_Inventor_case_base.settings")
try:
+2 -10
View File
@@ -1,13 +1,5 @@
{
"presets": [
"es2015"
],
"plugins": ["transform-runtime"],
"comments": false,
"env": {
"test": {
"presets": ["env", "stage-2"],
"plugins": ["istanbul"]
}
}
"es2015-ie"
]
}
+1 -1
View File
@@ -4,7 +4,7 @@ require('shelljs/global')
env.NODE_ENV = 'production'
var path = require('path')
var config = require('../config')
var config = require('./config')
var ora = require('ora')
var webpack = require('webpack')
var webpackConfig = require('./webpack.prod.conf')
+21
View File
@@ -0,0 +1,21 @@
// see http://vuejs-templates.github.io/webpack for documentation.
var path = require('path')
module.exports = {
build: {
env: {NODE_ENV: '"production"'},
index: path.resolve(__dirname, '../dist/index.html'), // index.html文件的路径
assetsRoot: path.resolve(__dirname, '../dist'), // build时公共资源根目录
assetsSubDirectory: 'static', // 公共资源子目录
assetsPublicPath: '/', // dev时公共资源根目录
productionSourceMap: true,
productionGzip: false, // 是否对productionGzipExtensions中包含的后缀的文件进行压缩处理
productionGzipExtensions: ['js', 'css'] // 对该后缀的文件进行压缩处理
},
dev: {
env: {NODE_ENV: '"development"'},
port: 8020,
proxyTable: {
}
}
}
+1 -1
View File
@@ -1,5 +1,5 @@
require('./check-versions')();
var config = require('../config');
var config = require('./config');
if (!process.env.NODE_ENV) process.env.NODE_ENV = JSON.parse(config.dev.env.NODE_ENV);
var path = require('path');
var express = require('express');
+2 -2
View File
@@ -1,5 +1,5 @@
var path = require('path')
var config = require('../config')
var config = require('./config')
var ExtractTextPlugin = require('extract-text-webpack-plugin')
exports.assetsPath = function(_path) {
@@ -51,7 +51,7 @@ exports.cssLoaders = function(options) {
sass: generateLoaders('sass', { indentedSyntax: true }),
scss: generateLoaders('sass'),
stylus: generateLoaders('stylus'),
styl: generateLoaders('stylus')
styl: generateLoaders('stylus'),
}
}
/*
+2 -2
View File
@@ -1,5 +1,5 @@
var utils = require('./utils')
var config = require('../config')
var config = require('./config')
var isProduction = process.env.NODE_ENV === 'production'
module.exports = {
@@ -8,4 +8,4 @@ module.exports = {
config.build.productionSourceMap : config.dev.cssSourceMap,
extract: true
})
}
}
+12 -12
View File
@@ -1,5 +1,5 @@
var path = require('path')
var config = require('../config')
var config = require('./config')
var utils = require('./utils')
var ExtractTextPlugin = require('extract-text-webpack-plugin')
var vueLoaderConfig = require('./vue-loader.conf')
@@ -75,20 +75,20 @@ module.exports = {
loader: 'vue-loader',
options: vueLoaderConfig
},
/*
awesome-typescript-loader等同于
thread-loader/happypack是进行多线程/进程编译,可充分利用多核cpu。
hard-source-webpack-plugin/cache-loader是记录编译缓存,编译增量编译。
ts-loader进行 TypeScript编译。
fork-ts-checker单独线程/进程进行错误检查。
*/
{
test: /\.ts$/,
loader:'ts-loader',
exclude: /node_modules/,
options: {
appendTsSuffixTo: [/\.vue$/],
}
use: [
{
loader: 'babel-loader'
},
{
loader: 'ts-loader',
options: {
appendTsSuffixTo: [/\.vue$/],
}
}
]
},
{
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
+1 -1
View File
@@ -1,6 +1,6 @@
var utils = require('./utils')
var webpack = require('webpack')
var config = require('../config')
var config = require('./config')
var merge = require('webpack-merge')
var baseWebpackConfig = require('./webpack.base.conf')
var HtmlWebpackPlugin = require('html-webpack-plugin')
+1 -1
View File
@@ -1,5 +1,5 @@
var path = require('path')
var config = require('../config')
var config = require('./config')
var utils = require('./utils')
var webpack = require('webpack')
var merge = require('webpack-merge')
-6
View File
@@ -1,6 +0,0 @@
var merge = require('webpack-merge')
var prodEnv = require('./prod.env')
module.exports = merge(prodEnv, {
NODE_ENV: '"development"'
})
-21
View File
@@ -1,21 +0,0 @@
// see http://vuejs-templates.github.io/webpack for documentation.
var path = require('path')
module.exports = {
build: {
env: require('./prod.env'),
index: path.resolve(__dirname, '../dist/index.html'), // index.html文件的路径
assetsRoot: path.resolve(__dirname, '../dist'), // build时公共资源根目录
assetsSubDirectory: 'static', // 公共资源子目录
assetsPublicPath: '/', // dev时公共资源根目录
productionSourceMap: true,
productionGzip: false, // 是否对productionGzipExtensions中包含的后缀的文件进行压缩处理
productionGzipExtensions: ['js', 'css'] // 对该后缀的文件进行压缩处理
},
dev: {
env: require('./dev.env'),
port: 8020,
proxyTable: {
}
}
}
-3
View File
@@ -1,3 +0,0 @@
module.exports = {
NODE_ENV: '"production"'
}
+1
View File
@@ -29,6 +29,7 @@
<div id="app" v-cloak>
<router-view></router-view>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-polyfill/6.26.0/polyfill.min.js"></script>
<!-- Bootstrap依赖于jQuery -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
+358 -44
View File
@@ -359,7 +359,7 @@
"enhanced-resolve": "3.3.0",
"loader-utils": "1.1.0",
"lodash": "4.17.4",
"micromatch": "3.1.4",
"micromatch": "3.1.5",
"mkdirp": "0.5.1",
"object-assign": "4.1.1",
"source-map-support": "0.4.18"
@@ -435,9 +435,9 @@
}
},
"extglob": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.3.tgz",
"integrity": "sha512-AyptZexgu7qppEPq59DtN/XJGZDrLcVxSHai+4hdgMMS9EpF4GBvygcWWApno8lL9qSjVpYt7Raao28qzJX1ww==",
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
"integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
"dev": true,
"requires": {
"array-unique": "0.3.2",
@@ -462,6 +462,46 @@
"to-regex-range": "2.1.1"
}
},
"is-accessor-descriptor": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
"integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
"dev": true,
"requires": {
"kind-of": "3.2.2"
},
"dependencies": {
"kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"requires": {
"is-buffer": "1.1.6"
}
}
}
},
"is-data-descriptor": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
"integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
"dev": true,
"requires": {
"kind-of": "3.2.2"
},
"dependencies": {
"kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"requires": {
"is-buffer": "1.1.6"
}
}
}
},
"is-descriptor": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
@@ -525,9 +565,9 @@
}
},
"micromatch": {
"version": "3.1.4",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.4.tgz",
"integrity": "sha512-kFRtviKYoAJT+t7HggMl0tBFGNAKLw/S7N+CO9qfEQyisob1Oy4pao+geRbkyeEd+V9aOkvZ4mhuyPvI/q9Sfg==",
"version": "3.1.5",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.5.tgz",
"integrity": "sha512-ykttrLPQrz1PUJcXjwsTUjGoPJ64StIGNE2lGVD1c9CuguJ+L7/navsE8IcDNndOoCMvYV0qc/exfVbMHkUhvA==",
"dev": true,
"requires": {
"arr-diff": "4.0.0",
@@ -535,10 +575,10 @@
"braces": "2.3.0",
"define-property": "1.0.0",
"extend-shallow": "2.0.1",
"extglob": "2.0.3",
"extglob": "2.0.4",
"fragment-cache": "0.2.1",
"kind-of": "6.0.2",
"nanomatch": "1.2.6",
"nanomatch": "1.2.7",
"object.pick": "1.3.0",
"regex-not": "1.0.0",
"snapdragon": "0.8.1",
@@ -1164,6 +1204,15 @@
"babel-runtime": "6.26.0"
}
},
"babel-plugin-transform-object-assign": {
"version": "6.22.0",
"resolved": "https://registry.npmjs.org/babel-plugin-transform-object-assign/-/babel-plugin-transform-object-assign-6.22.0.tgz",
"integrity": "sha1-+Z0vZvGgsNSY40bFNZaEdAyqILo=",
"dev": true,
"requires": {
"babel-runtime": "6.26.0"
}
},
"babel-plugin-transform-object-rest-spread": {
"version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz",
@@ -1174,6 +1223,16 @@
"babel-runtime": "6.26.0"
}
},
"babel-plugin-transform-proto-to-assign": {
"version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-plugin-transform-proto-to-assign/-/babel-plugin-transform-proto-to-assign-6.26.0.tgz",
"integrity": "sha1-xJPiSmJ0mkT37ellBsDLOhiR9ns=",
"dev": true,
"requires": {
"babel-runtime": "6.26.0",
"lodash": "4.17.4"
}
},
"babel-plugin-transform-regenerator": {
"version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz",
@@ -1284,6 +1343,37 @@
"babel-plugin-transform-regenerator": "6.26.0"
}
},
"babel-preset-es2015-ie": {
"version": "6.7.0",
"resolved": "https://registry.npmjs.org/babel-preset-es2015-ie/-/babel-preset-es2015-ie-6.7.0.tgz",
"integrity": "sha1-T8Of8zENBzI6BLzZfJxyl5tAe2I=",
"dev": true,
"requires": {
"babel-plugin-check-es2015-constants": "6.22.0",
"babel-plugin-transform-es2015-arrow-functions": "6.22.0",
"babel-plugin-transform-es2015-block-scoped-functions": "6.22.0",
"babel-plugin-transform-es2015-block-scoping": "6.26.0",
"babel-plugin-transform-es2015-classes": "6.24.1",
"babel-plugin-transform-es2015-computed-properties": "6.24.1",
"babel-plugin-transform-es2015-destructuring": "6.23.0",
"babel-plugin-transform-es2015-duplicate-keys": "6.24.1",
"babel-plugin-transform-es2015-for-of": "6.23.0",
"babel-plugin-transform-es2015-function-name": "6.24.1",
"babel-plugin-transform-es2015-literals": "6.22.0",
"babel-plugin-transform-es2015-modules-commonjs": "6.26.0",
"babel-plugin-transform-es2015-object-super": "6.24.1",
"babel-plugin-transform-es2015-parameters": "6.24.1",
"babel-plugin-transform-es2015-shorthand-properties": "6.24.1",
"babel-plugin-transform-es2015-spread": "6.22.0",
"babel-plugin-transform-es2015-sticky-regex": "6.24.1",
"babel-plugin-transform-es2015-template-literals": "6.22.0",
"babel-plugin-transform-es2015-typeof-symbol": "6.23.0",
"babel-plugin-transform-es2015-unicode-regex": "6.24.1",
"babel-plugin-transform-object-assign": "6.22.0",
"babel-plugin-transform-proto-to-assign": "6.26.0",
"babel-plugin-transform-regenerator": "6.26.0"
}
},
"babel-preset-stage-2": {
"version": "6.24.1",
"resolved": "https://registry.npmjs.org/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz",
@@ -1395,7 +1485,7 @@
"dev": true,
"requires": {
"cache-base": "1.0.1",
"class-utils": "0.3.5",
"class-utils": "0.3.6",
"component-emitter": "1.2.1",
"define-property": "1.0.0",
"isobject": "3.0.1",
@@ -1856,15 +1946,14 @@
}
},
"class-utils": {
"version": "0.3.5",
"resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.5.tgz",
"integrity": "sha1-F+eTEDdQ+WJ7IXbqNM/RtWWQPIA=",
"version": "0.3.6",
"resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
"integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
"dev": true,
"requires": {
"arr-union": "3.1.0",
"define-property": "0.2.5",
"isobject": "3.0.1",
"lazy-cache": "2.0.2",
"static-extend": "0.1.2"
},
"dependencies": {
@@ -1877,6 +1966,46 @@
"is-descriptor": "0.1.6"
}
},
"is-accessor-descriptor": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
"integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
"dev": true,
"requires": {
"kind-of": "3.2.2"
},
"dependencies": {
"kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"requires": {
"is-buffer": "1.1.6"
}
}
}
},
"is-data-descriptor": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
"integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
"dev": true,
"requires": {
"kind-of": "3.2.2"
},
"dependencies": {
"kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"requires": {
"is-buffer": "1.1.6"
}
}
}
},
"is-descriptor": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
@@ -1899,15 +2028,6 @@
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
"integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
"dev": true
},
"lazy-cache": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz",
"integrity": "sha1-uRkKT5EzVGlIQIWfio9whNiCImQ=",
"dev": true,
"requires": {
"set-getter": "0.1.0"
}
}
}
},
@@ -2558,7 +2678,7 @@
"integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
"dev": true,
"requires": {
"is-descriptor": "1.0.1"
"is-descriptor": "1.0.2"
}
},
"defined": {
@@ -4250,12 +4370,20 @@
"dev": true
},
"is-accessor-descriptor": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
"integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
"integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
"dev": true,
"requires": {
"kind-of": "3.2.2"
"kind-of": "6.0.2"
},
"dependencies": {
"kind-of": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
"integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
"dev": true
}
}
},
"is-arrayish": {
@@ -4294,12 +4422,20 @@
"dev": true
},
"is-data-descriptor": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
"integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
"integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
"dev": true,
"requires": {
"kind-of": "3.2.2"
"kind-of": "6.0.2"
},
"dependencies": {
"kind-of": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
"integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
"dev": true
}
}
},
"is-date-object": {
@@ -4309,20 +4445,20 @@
"dev": true
},
"is-descriptor": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.1.tgz",
"integrity": "sha512-G3fFVFTqfaqu7r4YuSBHKBAuOaLz8Sy7ekklUpFEliaLMP1Y2ZjoN9jS62YWCAPQrQpMUQSitRlrzibbuCZjdA==",
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
"integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
"dev": true,
"requires": {
"is-accessor-descriptor": "0.1.6",
"is-data-descriptor": "0.1.4",
"kind-of": "5.1.0"
"is-accessor-descriptor": "1.0.0",
"is-data-descriptor": "1.0.0",
"kind-of": "6.0.2"
},
"dependencies": {
"kind-of": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
"integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
"integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
"dev": true
}
}
@@ -5231,9 +5367,9 @@
"dev": true
},
"nanomatch": {
"version": "1.2.6",
"resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.6.tgz",
"integrity": "sha512-WJ6XTCbvWXUFPbi/bDwKcYkCeOGUHzaJj72KbuPqGn78Ba/F5Vu26Zlo6SuMQbCIst1RGKL1zfWBCOGAlbRLAg==",
"version": "1.2.7",
"resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.7.tgz",
"integrity": "sha512-/5ldsnyurvEw7wNpxLFgjVvBLMta43niEYOy0CJ4ntcYSbx6bugRUTQeFb4BR/WanEL1o3aQgHuVLHQaB6tOqg==",
"dev": true,
"requires": {
"arr-diff": "4.0.0",
@@ -5499,6 +5635,24 @@
"is-descriptor": "0.1.6"
}
},
"is-accessor-descriptor": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
"integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
"dev": true,
"requires": {
"kind-of": "3.2.2"
}
},
"is-data-descriptor": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
"integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
"dev": true,
"requires": {
"kind-of": "3.2.2"
}
},
"is-descriptor": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
@@ -7517,6 +7671,46 @@
"is-descriptor": "0.1.6"
}
},
"is-accessor-descriptor": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
"integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
"dev": true,
"requires": {
"kind-of": "3.2.2"
},
"dependencies": {
"kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"requires": {
"is-buffer": "1.1.6"
}
}
}
},
"is-data-descriptor": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
"integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
"dev": true,
"requires": {
"kind-of": "3.2.2"
},
"dependencies": {
"kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"requires": {
"is-buffer": "1.1.6"
}
}
}
},
"is-descriptor": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
@@ -7737,6 +7931,46 @@
"is-descriptor": "0.1.6"
}
},
"is-accessor-descriptor": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
"integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
"dev": true,
"requires": {
"kind-of": "3.2.2"
},
"dependencies": {
"kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"requires": {
"is-buffer": "1.1.6"
}
}
}
},
"is-data-descriptor": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
"integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
"dev": true,
"requires": {
"kind-of": "3.2.2"
},
"dependencies": {
"kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"requires": {
"is-buffer": "1.1.6"
}
}
}
},
"is-descriptor": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
@@ -8074,6 +8308,46 @@
"is-descriptor": "0.1.6"
}
},
"is-accessor-descriptor": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
"integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
"dev": true,
"requires": {
"kind-of": "3.2.2"
},
"dependencies": {
"kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"requires": {
"is-buffer": "1.1.6"
}
}
}
},
"is-data-descriptor": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
"integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
"dev": true,
"requires": {
"kind-of": "3.2.2"
},
"dependencies": {
"kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"requires": {
"is-buffer": "1.1.6"
}
}
}
},
"is-descriptor": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
@@ -8577,6 +8851,46 @@
"is-descriptor": "0.1.6"
}
},
"is-accessor-descriptor": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
"integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
"dev": true,
"requires": {
"kind-of": "3.2.2"
},
"dependencies": {
"kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"requires": {
"is-buffer": "1.1.6"
}
}
}
},
"is-data-descriptor": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
"integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
"dev": true,
"requires": {
"kind-of": "3.2.2"
},
"dependencies": {
"kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"requires": {
"is-buffer": "1.1.6"
}
}
}
},
"is-descriptor": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+1
View File
@@ -38,6 +38,7 @@
"babel-plugin-transform-runtime": "^6.22.0",
"babel-preset-env": "^1.2.1",
"babel-preset-es2015": "^6.24.1",
"babel-preset-es2015-ie": "^6.7.0",
"babel-preset-stage-2": "^6.22.0",
"babel-register": "^6.22.0",
"chalk": "^1.1.3",
+2 -1
View File
@@ -1,7 +1,8 @@
{
"compilerOptions": {
// 语法编译为es5语法,与Vue的浏览器支持保持一致
// 语法编译为es5
"target": "es5",
"jsx": "preserve",
// 模块采用import语法且不作转换(利用webpack 2+的tree-shake
"module": "es2015",
// 这可以对'this'上的数据属性进行更严格的推断
@@ -0,0 +1,28 @@
# the upstream component nginx needs to connect to
upstream django {
server 127.0.0.1:8001; # for a web port socket (we'll use this first)
}
server {
listen 8000;
charset utf-8;
# max upload size
client_max_body_size 75M; # adjust to taste
# Django media
location /media {
alias /srv/APP_Inventor_case_base_website/src/back-end-src/media; # your Django project's media files - amend as required
}
location /static {
alias /srv/APP_Inventor_case_base_website/src/back-end-src/static; # your Django project's static files - amend as required
}
# Finally, send all non-media requests to the Django server.
location / {
uwsgi_pass django;
include /etc/nginx/uwsgi_params; # the uwsgi_params file you installed
}
}
@@ -11,6 +11,7 @@ server {
location / {
root /srv/APP_Inventor_case_base_website/src/front-end-src/dist;
index index.html;
try_files $uri /index.html;
}
}
}
@@ -1,11 +1,13 @@
[program:programmingcases]
command = python3 manage.py runserver 0.0.0.0:8000
# nohup uwsgi --socket 127.0.0.1:8001 --module APP_Inventor_case_base.wsgi </dev/null &>/dev/null &
command = uwsgi --socket 127.0.0.1:8001 --module APP_Inventor_case_base.wsgi
directory = /srv/APP_Inventor_case_base_website/src/back-end-src
user = root
startsecs = 3
redirect_stderr = true
stdout_logfile_maxbytes = 50MB
stdout_logfile_backups = 10
stdout_logfile_backups = 2
stdout_logfile = /srv/log/supervisor/app.log
+3 -1
View File
@@ -1,3 +1,4 @@
raven
django==2.0.1
pillow
mysqlclient
@@ -26,4 +27,5 @@ beautifulsoup4
pymysql
fabric3
simplejson
paramiko
paramiko
uWSGI