上线前配置
settings.js
# base_url: 'http://39.99.192.127:8000', // 真实环境:django项目就是跑在8000端口上的
之后编译
# 前端执行 npm run build 把你写的vue代码编译成html,css,js
项目架构:
1.2 后端
修改setting中的pro.py

# 上线的配置文件 from .const import * import os # 现在的BASE_DIR就是小luffyapi BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) import sys sys.path.insert(0, BASE_DIR) APPS_DIR = os.path.join(BASE_DIR, 'apps') sys.path.insert(1, APPS_DIR) # Quick-start development settings - unsuitable for production # See https://docs.djangoproject.com/en/2.0/howto/deployment/checklist/ # SECURITY WARNING: keep the secret key used in production secret! SECRET_KEY = 'n(i@y4t6!n@)7l1ps$3ipz=9&3jutrpmuvu@uw*uyjo(r7&$+d' # SECURITY WARNING: don't run with debug turned on in production! DEBUG = False # 允许的host,正常情况填服务端地址(买的服务器的公网ip), ALLOWED_HOSTS = ['*'] # Application definition INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'rest_framework', 'rest_framework_jwt', 'corsheaders', # xadmin主体模块 'xadmin', # 渲染表格模块 'crispy_forms', # 为模型通过版本控制,可以回滚数据 'reversion', 'django_filters', 'user', 'home', 'course', 'order', ] MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', # 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', # 'luffyapi.utils.middles.CorsMiddleWare' 'corsheaders.middleware.CorsMiddleware', ] ROOT_URLCONF = 'luffyapi.urls' TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates')] , 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ] WSGI_APPLICATION = 'luffyapi.wsgi.application' # Database # https://docs.djangoproject.com/en/2.0/ref/settings/#databases # DATABASES = { # 'default': { # 'ENGINE': 'django.db.backends.sqlite3', # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), # } # } # 数据库配置 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'luffyapi', 'USER': 'luffy', 'PASSWORD': 'Luffy123?', 'HOST': '127.0.0.1', 'PORT': 3306 } } import pymysql pymysql.install_as_MySQLdb() # Password validation # https://docs.djangoproject.com/en/2.0/ref/settings/#auth-password-validators AUTH_PASSWORD_VALIDATORS = [ { 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', }, { 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', }, { 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', }, { 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', }, ] # Internationalization # https://docs.djangoproject.com/en/2.0/topics/i18n/ LANGUAGE_CODE = 'zh-hans' TIME_ZONE = 'Asia/Shanghai' USE_I18N = True USE_L10N = True USE_TZ = False # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/2.0/howto/static-files/ STATIC_URL = '/static/' MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR, 'media') # 现在的BASEDIR是luffyapi下的luffyapi AUTH_USER_MODEL = 'user.User' REST_FRAMEWORK = { 'EXCEPTION_HANDLER': 'luffyapi.utils.exceptions.common_exception_handler', # 异常处理 } # 配置日志字典 standard_format = '%(levelname)s [%(asctime)s][%(threadName)s:%(thread)d][日志名:%(name)s][%(filename)s:%(lineno)d]' '[%(message)s]' simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s' # 日志配置字典 LOGGING_DIC = { 'version': 1, 'disable_existing_loggers': False, 'formatters': { 'standard': { 'format': standard_format }, 'simple': { 'format': simple_format } }, 'filters': {}, 'handlers': { # 打印到终端的日志 'console': { 'level': 'ERROR', 'class': 'logging.StreamHandler', # 打印到屏幕 'formatter': 'simple' }, # 打印到文件的日志,收集info及以上的日志 'default': { 'level': 'INFO', 'class': 'logging.handlers.RotatingFileHandler', # 保存到文件,日志轮转 'formatter': 'standard', # 可以定制日志文件路径 # BASE_DIR = os.path.dirname(os.path.abspath(__file__)) # log文件的目录 # LOG_PATH = os.path.join(BASE_DIR,'a1.log') 'filename': os.path.join(os.path.dirname(BASE_DIR), 'logs', 'luffy.log'), # 日志文件 'maxBytes': 300 * 1024 * 1024, # 日志大小 5M,默认单位字节,日志大小达到5M就将其内容剪切到其他文件备份 'backupCount': 10, # 最大备份5份,备份文件名access.log.1,在filename名后.1或.2、.3。。。。 'encoding': 'utf-8', # 日志文件的编码,再也不用担心中文log乱码了 } }, 'loggers': { 'django': { 'handlers': ['default', 'console'], # 如果k为空,代表找不到k的时候用空k,并将日志名用这个空k 'level': 'DEBUG', 'propagate': False }, }, } CORS_ALLOW_CREDENTIALS = True CORS_ORIGIN_ALLOW_ALL = True # CORS_ORIGIN_WHITELIST = ( # '*' # ) CORS_ALLOW_METHODS = ( 'DELETE', 'GET', 'OPTIONS', 'PATCH', 'POST', 'PUT', 'VIEW', ) CORS_ALLOW_HEADERS = ( 'XMLHttpRequest', 'X_FILENAME', 'accept-encoding', 'authorization', 'content-type', 'dnt', 'origin', 'user-agent', 'x-csrftoken', 'x-requested-with', ) import datetime JWT_AUTH = { 'JWT_EXPIRATION_DELTA': datetime.timedelta(days=7), # 过期时间,手动配置 } REST_FRAMEWORK = { 'DEFAULT_THROTTLE_RATES': { 'sms': '1/m' # key要跟类中的scop对应 }, } # redis配置 CACHES = { "default": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://127.0.0.1:6379", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", "CONNECTION_POOL_KWARGS": {"max_connections": 100} # "PASSWORD": "123", } } } # 后台基URL BASE_URL = 'http://47.114.55.57:8000' # 前台基URL LUFFY_URL = 'http://47.114.55.57' # 支付宝同步异步回调接口配置 # 后台异步回调接口 NOTIFY_URL = BASE_URL + "/order/success/" # post回调,后台地址 # 前台同步回调接口,没有 / 结尾 RETURN_URL = LUFFY_URL + "/pay/success" # get回调,前台地址
项目根路径新建一个manage_pro.py(把原来的manage.py复制改动为上线的配置文件)

#!/usr/bin/env python import os import sys if __name__ == "__main__": os.environ.setdefault("DJANGO_SETTINGS_MODULE", "luffyapi.settings.pro") try: from django.core.management import execute_from_command_line except ImportError as exc: raise ImportError( "Couldn't import Django. Are you sure it's installed and " "available on your PYTHONPATH environment variable? Did you " "forget to activate a virtual environment?" ) from exc execute_from_command_line(sys.argv)
wsgi.py:改成线上的pro

import os from django.core.wsgi import get_wsgi_application # wsgi用线上配置文件 os.environ.setdefault("DJANGO_SETTINGS_MODULE", "luffyapi.settings.pro") application = get_wsgi_application()
在项目目录生成依赖的关系文件requirement.txt
# pip freeze >requirement.txt
requirement.txt
celery==4.4.6 Django==2.0.7 django-cors-headers==3.4.0 django-filter django-redis qcloudsms_py djangorestframework==3.11.0 djangorestframework-jwt==1.11.0 Pillow==7.2.0 PyMySQL==0.9.3 python-alipay-sdk==2.0.1 redis==3.5.3 xadmin @ https://codeload.github.com/sshwsfc/xadmin/zip/django2
2 上线
2.1 重要
# yum update -y
# yum -y groupinstall "Development tools" # 安装开发包 # yum install -y openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel psmisc libffi-devel
# git
2.2 安装mysql
1)前往用户根目录 >: cd ~ 2)下载mysql57 >: wget http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm 也可以本地上传,这条命令要在本地终端上执行 >: scp -r C:UsersdellDesktoppkgmysql57-community-release-el7-10.noarch.rpm root@39.99.192.127:~ 3)安装mysql57 >: yum -y install mysql57-community-release-el7-10.noarch.rpm >: yum -y install mysql-community-server 4)启动mysql57并查看启动状态 >: systemctl start mysqld.service >: systemctl status mysqld.service 5)查看默认密码并登录 >: grep "password" /var/log/mysqld.log >: mysql -uroot -p 6)修改密码 # ALTER USER 'root'@'localhost' IDENTIFIED BY 'new password'; >: ALTER USER 'root'@'localhost' IDENTIFIED BY '111111';
创建数据库,配置用户
1.管理员连接数据库 >: mysql -uroot -p111111 2.创建数据库 >: create database luffyapi charset='utf8'; 3.查看用户 >: select user,host,password from mysql.user; # 5.7往后的版本 >: select user,host,authentication_string from mysql.user; 4.为指定数据库配置指定账户 """ 设置权限账号密码 # 授权账号命令:grant 权限(create, update) on 库.表 to '账号'@'host' identified by '密码' 1.配置任意ip都可以连入数据库的账户,通过luffy用户和密码可以对luffyapi数据库进行所有操作 >: grant all privileges on luffyapi.* to 'luffy'@'%' identified by 'Luffy123?'; 2.由于数据库版本的问题,可能本地还连接不上,就给本地用户单独配置 >: grant all privileges on luffyapi.* to 'luffy'@'localhost' identified by 'Luffy123?'; 3.刷新一下权限 >: flush privileges; 只能操作luffy数据库的账户 账号:luffy 密码:Luffy123? """
2.3 安装redis
安装依赖:
#yum install gcc gcc-c++ -y //安装依赖文件
redis软件包下载放在了/usr/local/src/目录下
# 解压安装 # cd /usr/local/src # wget http://download.redis.io/releases/redis-5.0.5.tar.gz [root@localhost src]# tar zxvf redis-5.0.5.tar.gz //解压软件包 [root@localhost src]# cd redis-5.0.5 //进入 [root@localhost redis-5.0.5]# make PREFIX=/usr/local/redis install //编译安装到指定目录 #cp redis.conf /usr/local/redis/ //拷贝配置文件到redis下 # 将/usr/local/redis/bin/目录加入至环境变量配置文件/etc/profile末尾,然后Shell终端执行source /etc/profile让环境变量生效 # vi /etc/profile export PATH=/usr/local/redis/bin:$PATH //文件末尾添加 # source /etc/profile
Nohup后台启动及停止Redis服务命令
# nohup /usr/local/redis/bin/redis-server /usr/local/redis/redis.conf & //启动redis #/usr/local/redis/bin/redis-cli -p 6379 shutdown //关闭redis #redis-cli //启动客户端 >keys * //查看已有键值 >FLUSHALL //清空缓存中的数据
https://www.cnblogs.com/baicai37/p/12327279.html
https://www.cnblogs.com/baicai37/p/13322153.html
2.6 安装nginx
#安装PCRE库支持 yum install pcre-devel pcre openssl openssl-devel gcc gcc-c++ zlib zlib-devel -y #下载Nginx源码包 cd /usr/local/src wget -c http://nginx.org/download/nginx-1.12.0.tar.gz #解压Nginx源码包 tar -xzf nginx-1.12.0.tar.gz #进入解压目录,然后sed修改Nginx版本信息为JWS #cd nginx-1.12.0 #sed -i -e 's/1.12.0//g' -e 's/nginx//JWS/g' -e 's/"NGINX"/"JWS"/g' src/core/nginx.h //用于隐藏Nginx版本号 #预编译Nginx useradd www;./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module #.configure预编译成功后,执行make命令进行编译并执行make install 正式安装 make&&make install #至此Nginx WEB服务器安装完毕。 #优化启动路径 # ln -s /usr/local/nginx/sbin/nginx /usr/bin/
将nginx添加进系统服务中
# vim /etc/init.d/nginx #!/bin/bash # chkconfig: - 85 15 PATH=/usr/local/nginx DESC="nginx daemon" NAME=nginx DAEMON=$PATH/sbin/$NAME CONFIGFILE=$PATH/conf/$NAME.conf PIDFILE=$PATH/logs/$NAME.pid SCRIPTNAME=/etc/init.d/$NAME set -e [ -x "$DAEMON" ] || exit 0 do_start() { $DAEMON -c $CONFIGFILE || echo -n "nginx already running" } do_stop() { $DAEMON -s stop || echo -n "nginx not running" } do_reload() { $DAEMON -s reload || echo -n "nginx can't reload" } case "$1" in start) echo -n "Starting $DESC: $NAME" do_start echo "." ;; stop) echo -n "Stopping $DESC: $NAME" do_stop echo "." ;; reload|graceful) echo -n "Reloading $DESC configuration..." do_reload echo "." ;; restart) echo -n "Restarting $DESC: $NAME" do_stop do_start echo "." ;; *) echo "Usage: $SCRIPTNAME {start|stop|reload|restart}" >&2 exit 3 ;; esac exit 0 #chmod a+x /etc/init.d/nginx #chkconfig --add nginx #chkconfig nginx on #systemctl start nginx //服务 #启动nginx服务 systemctl start nginx.service #停止nginx服务 systemctl stop nginx.service #重启nginx服务 systemctl restart nginx.service #重新读取nginx配置(这个最常用, 不用停止nginx服务就能使修改的配置生效) systemctl reload nginx.service
补充知识:
# nginx ,apache,uwsgi,gunicorn,php,jboss,tomcat,weblogic关系 -nginx ,apache,IIS:http的转发 -uwsgi(c语言写的),gunicorn(python写的):符合WSGI协议的web服务器,把http请求,转成python语言能识别的字典。。 -tomcat(免费),jboss(收费):等同于咱们的uwsgi,符合javaweb的协议 -php(服务器):等同于咱们的uwsgi,符合php的协议
2.7 前端项目部署
将装备阶段前端通过npm run build生成的dist文件夹上传到服务器
部署
# 创建目录 # mkdir -p /var/www/html
# 将/root/dist文件夹内容拷贝到/var/www/html
# cp -r /root/dist/* /var/www/html/
# 配置nginx.conf配置文件 # cd /usr/local/nginx/conf # vim nginx.conf #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; server { listen 80; server_name localhost; root /var/www/html; location / { root /var/www/html/; index index.html index.htm; try_files $uri $uri/ /index.html; # 解决单页面应用刷新404问题 } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
2.8 后台布置
下载luffyapi项目
# mkdir /home/project # cd /home/project # git clone https://gitee.com/baicaijc/luffyapi.git
# cd luffyapi/ # rm -rf celerybeat-s* # cd luffyapi/apps/ # cd course/ # cd migrations/ # cd .. # cd ../home/ # cd migrations/ # rm -rf 00* # cd ../../order/migrations/ # cd ../../user/migrations/ # rm -rf 0001_initial.py
https://www.cnblogs.com/baicai37/p/13207983.html
# mkvirtualenv luffy -p python3
配置好之后,进入项目目录
# cd /home/project/luffyapi/ # mkdir logs # 因为git时候忽略了 # 安装依赖模块 # pip install -r requirement.txt # 数据库迁移 # python manage_pro.py makemigrations # python manage_pro.py migrate # 创建超级用户(用户名alias,密码admin@123) # python manage_pro.py createsuperuser
# 在真实环境下安装 pip3 install uwsgi # 建立软连接 ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi # 虚拟环境下安装 workon luffy pip install uwsgi # 进行uwsgi服务配置,内容如下 # vim /home/project/luffyapi/luffyapi.xml <uwsgi> <socket>127.0.0.1:8808</socket> <!-- 内部端口,自定义 --> <chdir>/home/project/luffyapi/</chdir> <!-- 项目路径 --> <module>luffyapi.wsgi</module> <!-- luffyapi为wsgi.py所在目录名--> <processes>4</processes> <!-- 进程数 --> <daemonize>uwsgi.log</daemonize> <!-- 日志文件 --> </uwsgi>
启动uwsgi
1)启动uwsgi (luffy) [root@aliyun ~]# uwsgi -x /home/project/luffyapi/luffyapi.xml 2)关闭 uwsgi,重新启动 uwsgi (luffy) [root@aliyun ~]# pkill -f uwsgi -9 (luffy) [root@aliyun ~]# uwsgi -x /home/project/luffyapi/luffyapi.xml
# vim /usr/local/nginx/conf/nginx.conf #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; server { listen 80; server_name localhost; root /var/www/html; location / { root /var/www/html/; index index.html index.htm; try_files $uri $uri/ /index.html; # 解决单页面应用刷新404问题 } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } server { listen 8000; server_name localhost; root /var/www/html; location / { include uwsgi_params; uwsgi_pass 127.0.0.1:8808; # 端口要和uwsgi里配置的一样 uwsgi_param UWSGI_SCRIPT luffyapi.wsgi; #wsgi.py所在的目录名+.wsgi uwsgi_param UWSGI_CHDIR /home/project/luffyapi/; # 项目路径 } } }
2.11 收集后端静态文件
需要配置配置文件pro.py,在STATIC_URL下面添加两行
STATIC_URL = '/static/' STATIC_ROOT = '/home/project/luffyapi/luffyapi/static' STATICFILES_DIRS = (os.path.join(BASE_DIR, "static"),)
开始收集
# 项目目录下没有 static 文件夹需要新建 >: mkdir /home/project/luffyapi/luffyapi/static # 完成静态文件迁移 >: python /home/project/luffyapi/manage_pro.py collectstatic
2.12 Nginx配置静态路径
# vim /usr/local/nginx/conf/nginx.conf #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; server { listen 80; server_name localhost; root /var/www/html; location / { root /var/www/html/; index index.html index.htm; try_files $uri $uri/ /index.html; # 解决单页面应用刷新404问题 } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } server { listen 8000; server_name localhost; root /var/www/html; location / { include uwsgi_params; uwsgi_pass 127.0.0.1:8808; # 端口要和uwsgi里配置的一样 uwsgi_param UWSGI_SCRIPT luffyapi.wsgi; #wsgi.py所在的目录名+.wsgi uwsgi_param UWSGI_CHDIR /home/project/luffyapi/; # 项目路径 } # 新增的配置静态文件 location /static { alias /home/project/luffyapi/luffyapi/static; } } }
2.13 重启nginx和uwsgi
# 关闭 uwsgi,重新启动 uwsgi (luffy) [root@aliyun ~]# pkill -f uwsgi -9 (luffy) [root@aliyun ~]# uwsgi -x /home/project/luffyapi/luffyapi.xml # 重新启动 nginx # systemctl restart nginx
2.14 插入数据
1)插入banner数据
准备banner图片通过xadmin后台手动录入
2)插入其他表数据
-- 老师表 INSERT INTO luffy_teacher(id, orders, is_show, is_delete, created_time, updated_time, name, role, title, signature, image, brief) VALUES (1, 1, 1, 0, '2019-07-14 13:44:19.661327', '2019-07-14 13:46:54.246271', 'Alex', 1, '老男孩Python教学总监', '金角大王', 'teacher/alex_icon.png', '老男孩教育CTO & CO-FOUNDER 国内知名PYTHON语言推广者 51CTO学院20162017年度最受学员喜爱10大讲师之一 多款开源软件作者 曾任职公安部、飞信、中金公司、NOKIA中国研究院、华尔街英语、ADVENT、汽车之家等公司'); INSERT INTO luffy_teacher(id, orders, is_show, is_delete, created_time, updated_time, name, role, title, signature, image, brief) VALUES (2, 2, 1, 0, '2019-07-14 13:45:25.092902', '2019-07-14 13:45:25.092936', 'Mjj', 0, '前美团前端项目组架构师', NULL, 'teacher/mjj_icon.png', '是马JJ老师, 一个集美貌与才华于一身的男人,搞过几年IOS,又转了前端开发几年,曾就职于美团网任高级前端开发,后来因为不同意王兴(美团老板)的战略布局而出家做老师去了,有丰富的教学经验,开起车来也毫不含糊。一直专注在前端的前沿技术领域。同时,爱好抽烟、喝酒、烫头(锡纸烫)。 我的最爱是前端,因为前端妹子多。'); INSERT INTO luffy_teacher(id, orders, is_show, is_delete, created_time, updated_time, name, role, title, signature, image, brief) VALUES (3, 3, 1, 0, '2019-07-14 13:46:21.997846', '2019-07-14 13:46:21.997880', 'Lyy', 0, '老男孩Linux学科带头人', NULL, 'teacher/lyy_icon.png', 'Linux运维技术专家,老男孩Linux金牌讲师,讲课风趣幽默、深入浅出、声音洪亮到爆炸'); -- 分类表 INSERT INTO luffy_course_category(id, orders, is_show, is_delete, created_time, updated_time, name) VALUES (1, 1, 1, 0, '2019-07-14 13:40:58.690413', '2019-07-14 13:40:58.690477', 'Python'); INSERT INTO luffy_course_category(id, orders, is_show, is_delete, created_time, updated_time, name) VALUES (2, 2, 1, 0, '2019-07-14 13:41:08.249735', '2019-07-14 13:41:08.249817', 'Linux'); -- 课程表 INSERT INTO luffy_course(id, orders, is_show, is_delete, created_time, updated_time, name, course_img, course_type, brief, level, pub_date, period, attachment_path, status, students, sections, pub_sections, price, course_category_id, teacher_id) VALUES (1, 1, 1, 0, '2019-07-14 13:54:33.095201', '2019-07-14 13:54:33.095238', 'Python开发21天入门', 'courses/alex_python.png', 0, 'Python从入门到入土&&&Python从入门到入土&&&Python从入门到入土&&&Python从入门到入土&&&Python从入门到入土&&&Python从入门到入土&&&Python从入门到入土&&&Python从入门到入土&&&Python从入门到入土&&&Python从入门到入土&&&Python从入门到入土&&&Python从入门到入土', 0, '2019-07-14', 21, '', 0, 231, 120, 120, 0.00, 1, 1); INSERT INTO luffy_course(id, orders, is_show, is_delete, created_time, updated_time, name, course_img, course_type, brief, level, pub_date, period, attachment_path, status, students, sections, pub_sections, price, course_category_id, teacher_id) VALUES (2, 2, 1, 0, '2019-07-14 13:56:05.051103', '2019-07-14 13:56:05.051142', 'Python项目实战', 'courses/mjj_python.png', 0, '', 1, '2019-07-14', 30, '', 0, 340, 120, 120, 99.00, 1, 2); INSERT INTO luffy_course(id, orders, is_show, is_delete, created_time, updated_time, name, course_img, course_type, brief, level, pub_date, period, attachment_path, status, students, sections, pub_sections, price, course_category_id, teacher_id) VALUES (3, 3, 1, 0, '2019-07-14 13:57:21.190053', '2019-07-14 13:57:21.190095', 'Linux系统基础5周入门精讲', 'courses/lyy_linux.png', 0, '', 0, '2019-07-14', 25, '', 0, 219, 100, 100, 39.00, 2, 3); -- 章节表 INSERT INTO luffy_course_chapter(id, orders, is_show, is_delete, created_time, updated_time, chapter, name, summary, pub_date, course_id) VALUES (1, 1, 1, 0, '2019-07-14 13:58:34.867005', '2019-07-14 14:00:58.276541', 1, '计算机原理', '', '2019-07-14', 1); INSERT INTO luffy_course_chapter(id, orders, is_show, is_delete, created_time, updated_time, chapter, name, summary, pub_date, course_id) VALUES (2, 2, 1, 0, '2019-07-14 13:58:48.051543', '2019-07-14 14:01:22.024206', 2, '环境搭建', '', '2019-07-14', 1); INSERT INTO luffy_course_chapter(id, orders, is_show, is_delete, created_time, updated_time, chapter, name, summary, pub_date, course_id) VALUES (3, 3, 1, 0, '2019-07-14 13:59:09.878183', '2019-07-14 14:01:40.048608', 1, '项目创建', '', '2019-07-14', 2); INSERT INTO luffy_course_chapter(id, orders, is_show, is_delete, created_time, updated_time, chapter, name, summary, pub_date, course_id) VALUES (4, 4, 1, 0, '2019-07-14 13:59:37.448626', '2019-07-14 14:01:58.709652', 1, 'Linux环境创建', '', '2019-07-14', 3); -- 课时表 INSERT INTO luffy_course_Section(id, is_show, is_delete, created_time, updated_time, name, orders, section_type, section_link, duration, pub_date, free_trail, chapter_id) VALUES (1, 1, 0, '2019-07-14 14:02:33.779098', '2019-07-14 14:02:33.779135', '计算机原理上', 1, 2, NULL, NULL, '2019-07-14 14:02:33.779193', 1, 1); INSERT INTO luffy_course_Section(id, is_show, is_delete, created_time, updated_time, name, orders, section_type, section_link, duration, pub_date, free_trail, chapter_id) VALUES (2, 1, 0, '2019-07-14 14:02:56.657134', '2019-07-14 14:02:56.657173', '计算机原理下', 2, 2, NULL, NULL, '2019-07-14 14:02:56.657227', 1, 1); INSERT INTO luffy_course_Section(id, is_show, is_delete, created_time, updated_time, name, orders, section_type, section_link, duration, pub_date, free_trail, chapter_id) VALUES (3, 1, 0, '2019-07-14 14:03:20.493324', '2019-07-14 14:03:52.329394', '环境搭建上', 1, 2, NULL, NULL, '2019-07-14 14:03:20.493420', 0, 2); INSERT INTO luffy_course_Section(id, is_show, is_delete, created_time, updated_time, name, orders, section_type, section_link, duration, pub_date, free_trail, chapter_id) VALUES (4, 1, 0, '2019-07-14 14:03:36.472742', '2019-07-14 14:03:36.472779', '环境搭建下', 2, 2, NULL, NULL, '2019-07-14 14:03:36.472831', 0, 2); INSERT INTO luffy_course_Section(id, is_show, is_delete, created_time, updated_time, name, orders, section_type, section_link, duration, pub_date, free_trail, chapter_id) VALUES (5, 1, 0, '2019-07-14 14:04:19.338153', '2019-07-14 14:04:19.338192', 'web项目的创建', 1, 2, NULL, NULL, '2019-07-14 14:04:19.338252', 1, 3); INSERT INTO luffy_course_Section(id, is_show, is_delete, created_time, updated_time, name, orders, section_type, section_link, duration, pub_date, free_trail, chapter_id) VALUES (6, 1, 0, '2019-07-14 14:04:52.895855', '2019-07-14 14:04:52.895890', 'Linux的环境搭建', 1, 2, NULL, NULL, '2019-07-14 14:04:52.895942', 1, 4);