文章目录
整体总结
Flask是python的web框架, 首先python本身开发效率就高,再因为Flask是轻量级的,相比Django容易很多。
创建项目独立的python环境
部署python项目时减少依赖包遗漏的情况,使用venv模块为每个项目创建独立的python环境,实现依赖的隔离。
在工程目录下运行:(xxxxxx是运行环境目录)
python -m venv xxxxxx
windows下python独立环境目录结构
安装第三方python库和启动我们的python项目的时候都需要先启动python独立环境,运行:
./env/Scripts/activate.bat
linux下python独立环境目录结构
启动独立环境:
source ./env_linux/bin/activate
关闭独立环境:
deactivate
大概需要安装的第三方库
使用websockt实现python代码与html界面的通讯
python:
@sockets.route('/message')
def message(msg):
# 1. 判断是否为Websocket请求,http不包含wsgi.websocket
ws = request.environ.get('wsgi.websocket')
if not ws:
return 'need use websocket'
# 此处连接成功
dict_value={"msg":"xxxxxxx"}
ws.send(json.dumps(dict_value))
html中js
//简化示例
var ws = null;
if ('WebSocket' in window) {
ws = new WebSocket(url);
}
ws.onclose = function () {
//todo 连接关闭,处理如重连
};
ws.onerror = function () {
//todo
};
ws.onopen= function () {
//todo 连接成功
};
ws.onmessage = function (event) {
var response = JSON.parse(event.data);
//todo
};
界面F12中看到提示连接成功后立马连接关闭。
网上查是Flask版本过高引起的xxx不匹配问题。把Flask降低版本:
pip install Flask==1.1.2
linux下数据库查询异常
把db调用放到with app.app_context()里。
###flask和socket创建###
app = Flask(__name__,static_url_path="/static",static_folder="static",template_folder="templates")
app.secret_key = ';xxxxxxfsfs'
sockets = Sockets(app)
from flask_cors import *
CORS(app, supports_credentials=True)
###配置数据库
basedir = os.path.abspath(os.path.dirname(__file__))+"/static/db"
app.config["SQLALCHEMY_DATABASE_URI"] = 'sqlite:///'+os.path.join(basedir, 'xxxx.sqlite')
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = True
db = SQLAlchemy(app)
##数据库表1信息
class xxxxx(db.Model):
id = db.Column(db.Integer,primary_key=True, autoincrement=True)
msgType = db.Column(db.String(8))#最短是8否则建表不成功
checkFrom = db.Column(db.String(16))
date = db.Column(db.Integer)
type = db.Column(db.Integer)
def __repr__(self):
return self.checkFrom+"_"+str(self.date)
##数据库表2信息
class yyyyy(db.Model):
id = db.Column(db.Integer,primary_key=True, autoincrement=True)
msgType = db.Column(db.String(8))#最短是8否则建表不成功
checkFrom = db.Column(db.String(16))
date = db.Column(db.Integer)
type = db.Column(db.Integer)
def __repr__(self):
return self.checkFrom+"_"+str(self.date)
if __name__ == '__main__':
with app.app_context():
db.create_all()#统一建表
初次登录web的时候背景图片和css不起作用
F12查看有报错,提示重定向过多。
原因是如下代码有问题:下载static下的东西的时候被异常重定向到了login
@app.before_request
def before_reuqest():
if request.path == '/login':
return None
if request.path == '/register':
return None
user_info = session.get('user_info')
if user_info:
return None
return redirect('login')
修改成:
@app.before_request
def before_reuqest():
if request.path == '/login':
return None
if request.path == '/register':
return None
user_info = session.get('user_info')
if user_info:
return None
if request.path.startswith("/static"):#过滤掉static
return None
return redirect('login')