sequelize设置时间默认值
https://github.com/sequelize/sequelize/issues/4896
12345678910111213const { Sequelize, DataTypes } = require('sequelize')const User = sequelize.define('user', { // ... createdAt: { type: DataTypes.DATE, defaultValue: Sequelize.literal('CURRENT_TIMESTAMP') }, updatedAt: { type: DataTypes.DATE, defaultValue: Sequelize.literal('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP') }})
1234567891011mysql> ...
vue+koa+token登录验证
Koa安装 koa-jwt、jsonwebtoken
index.js
1234567891011121314const jwt = require('koa-jwt')app.use((ctx, next) => { return next().catch(err => { if (err.status === 401) { ctx.body = fail(err.originalError ? err.originalError.message : err.message, 401) } else { throw err } })})app.use(jwt({ secret: 'secret' }).unless({ path: [/^\/api\/user\/login/]}))
router/users.js
123456789101112131415161718 ...
flask项目的部署
环境:CentOS 7.6,Python 3.6.8
两种方法,一种 supervisor,一种 docker
gunicorn + supervisor使用 ftp 将项目文件传到服务器中
安装配置虚拟环境123456$ yum install python-virtualenv$ virturalenv venv$ source ./venv/bin/activate$ pip install -r requirements.txt$ pip install gunicorn
安装配置 supervisor12345678910111213141516171819202122232425$ yum install supervisor$ systemctl start supervisor$ systemctl enable supervisor$ vim /etc/supervisord.conf# 最后一行将 .ini 改为 .conf...[include]files = supervisord.d/*.conf$ systemctl restart supervisor$ ...
flask-sqlalchemy中的一对多、多对多
一对多Article 和 Content 一对多关系
123456789101112131415161718class Article(db.Model): __tablename__ = 'articles' aid = db.Column(db.Integer, primary_key=True, autoincrement=True) title = db.Column(db.String(50), nullable=False) content = db.Column(db.Text, nullable=False)+ comments = db.relationship('Comment', backref=db.backref('articles')) createdDate = db.Column(db.DateTime, nullable=False, default=datetime.now(), server_defau ...
flask-migrate映射数据库
使用 db.create_all() 后期修改或者增加字段的时候,不会自动映射到数据库中,必须删除表,然后重新运行 db.create_all() 才会重新映射
flask-migrate 可以将修改的字段映射到数据库中
老版本的 flask-migrate 需配合 flask-script 使用,由于 flask-script 长久不维护,且没有适配 flask 2.0 以上的版本,所以 flask-migrate 去掉了 flask-script 的支持
官方文档:https://flask-migrate.readthedocs.io/en/latest
安装12$ activate # 进入虚拟环境$ pip install flask-migrate # 当前版本为 3.1.0
使用1234567891011121314151617181920from flask import *import configfrom db import dbfrom models import *+ from flask_migrate import Migrateapp = Flask(_ ...
flask使用flask-sqlalchemy操作数据库
Flask 中一般使用 pymysql 或者 flask-sqlalchemy 操作数据库,本案例中使用 flask-sqlalchemy 进行基本的操作
安装12$ activate$ pip install flask-sqlalchemy pymysql
需配置数据库驱动,我使用的是 pymysql,默认驱动为 mysqldb,python3 好像并不支持 pip 安装 mysqldb,pymysql 效率好像也更高一些
连接uri 格式 dialect+driver://username:password@host:port/database
实例:mysql+pymysql://root:root@localhost:3306/mydatabase
配置123from flask_sqlalchemy import SQLAlchemyapp.config['SQLALCHEMY_DATABASE_URI'] = mysql+pymysql://root:root@localhost:3306/mydatabasedb = SQLAlchemy(app) ...
flask的基本使用
最近在做毕设,基于 OpenCV 的智能监控系统,使用 C/S 架构,最后技术选型用了 Flask 框架
用了差不多半天时间学了下 Flask,不得不说,开发起来是真的舒服。之前用 node + art-template 开发的一个博客系统,且不说配置麻烦,开发起来也比较繁琐,使用起来两者的语法很多都很相似,上手很快
Flask 自带基于 Jinja 的模板引擎,session,蓝图(相当于 express、koa 中的 router),并且衍生除了很多插件
等忙完这段时间准备用 Python 重构下之前写的项目
最基本的 Flask 应用1234567from flask import *app = Flask(__name__)@app.route("/")def hello_world(): return "<p>Hello, World!</p>"
路由[email protected]('/')def index(): return 'Index Page'@ ...
部署前端项目
express安装 express
1npm i express
如果 vue-router 路由模式为 history,需额外安装 connect-history-api-fallback 中间件
新建文件 serve/main.js
123456789const express = require('express')const app = express()const path = require('path')+ const history = require('connect-history-api-fallback')+ app.use(history())app.use(express.static(path.resolve(__dirname, '../dist')))app.listen(5678)
package.json
12345{ "scripts": { "prod": "pm2 s ...
深拷贝和浅拷贝
主要区别:浅拷贝只是引用变量的内存地址,深拷贝复制真正的值
浅拷贝Object.assign 、展开运算符(…)
深拷贝使用 JSON.parse(JSON.stringify(object))
局限性
会忽略 undefined
会忽略 symbol
不能序列化函数
不能解决循环引用的对象
123456789101112131415161718192021function deepClone(obj) { if (typeof obj !== 'object' || obj === null) { return obj } let newObj if (Array.isArray(obj)) { newObj = [] } else { newObj = {} } for (let key in obj) { if (obj.hasOwnProperty(key)) ...
搭建前端脚手架工具
搭建了一个前端脚手架工具,模板集成了 vite、vue3、vue-router、vuex、axios
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081#!/usr/bin/env nodeconst { program } = require('commander')const inquirer = require('inquirer')const chalk = require('chalk')const fs = require('fs')const path = require('path')const memFs = require('mem-fs')const editor = re ...