Flask开发简易网站疑难点梳理

整体总结

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')