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

文章介绍了使用Flask框架进行PythonWeb开发时如何创建项目独立的环境,包括Windows和Linux下的venv设置。文章还讨论了websockt实现Python代码与HTML界面的通讯问题,以及遇到的连接关闭和版本兼容性问题。此外,提到了Linux下数据库查询异常的解决方法,以及初次登录网页时背景图片和CSS加载失败的重定向问题及其解决方案。
摘要由CSDN通过智能技术生成

整体总结

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值