Python flask报错

使用Python连接数据库构建一个搜索引擎
但是代码一直报错


# 以后操作flask通过Flask去操作
from flask import Flask,render_template,request
# 导入操作数据库的模块
from flask_sqlalchemy import SQLAlchemy
import requests
from sqlalchemy import or_,and_
import time
# app: 看成是服务器对象 通过app来操作服务器
app = Flask(__name__)
# 服务器操作数据库
# 配置参数
class Config:
    SQLALCHEMY_DATABASE_URI = "mysql://root@localhost:3306/shousuo"
    # 设置sqlalchemy自动更跟踪数据库
    SQLALCHEMY_TRACK_MODIFICATIONS = True
# 进行app配置
app.config.from_object(Config)
db = SQLAlchemy(app)

# 新闻的数据库表
# 创建模型类
class News(db.Model):
    # 表名
    __tablename__ = 'news'
    # 字段 (名字和类型)
    id = db.Column(db.Integer,primary_key=True)
    # 新闻标题
    title = db.Column(db.String(255))
    # 作者
    author = db.Column(db.String(255))
    # 作者头像
    icon = db.Column(db.String(255))
    # 时间
    time = db.Column(db.String(255))
    # 图片
    img = db.Column(db.String(255))
    # 新闻详情页链接
    detailUrl = db.Column(db.String(255))

# 写好路由
# 首页
@app.route('/')
def index():
    # return 'Hello World!11111'
    # 返回一个完整的网页 前提: 网页文件一定是在templates文件夹 render_template(网页文件名)
    return render_template('index.html')
# 查找的路由: /search?wd=bbb&page=1
@app.route('/search')
def search():
    # 获取接口的参数
    # 把接口的参数转化为字典
    args = request.args.to_dict()
    # 先获取关键字
    word = args['wd']
    # 获取当前页码
    # 查看是否有page,如果没有,默认为1
    page = int(args.get('page') or 1)
    # page = int(args['page'])
    # 每页给前端返回几条数据
    size = 20
    # 分页查询
    # page: 第几页的数据
    # per_page: 每页几条数据
    result = News.query.filter(or_(News.title.like('%'+word+'%'), News.author.like('%'+word+'%'))).paginate(page=page, per_page=size,error_out=False)
    # 存储多条数据的列表
    dataList = []
    # 获取到每条数据
    for i in result.items:
        # i: 每条数据
        # 将时间戳转化为时间
        # 时间戳 把毫秒转化为秒  1s = 1000ms
        a = int(i.time) // 1000
        # 将时间戳转化为时间元组对象
        timeTuple = time.localtime(a)
        # 将时间元组进行格式化: 按照某种格式显示时间
        # 年-月-日 时:分:秒  2021-11-25 15:57:00
        # %Y-%m-%d %H:%M:%S
        timeStr = time.strftime('%Y-%m-%d %H:%M:%S', timeTuple)
        # 构建每条数据的字典
        dic = {
            'title': i.title,
            'author': i.author,
            'icon': i.icon,
            'time': timeStr,
            'img': i.img,
            'detailUrl': i.detailUrl,
        }
        # 加入到列表当中
        dataList.append(dic)
    # print(dataList)
    # 3.总结果数
    # print(result.total)
    # 4.总页数
    # print(result.pages)
    # 需要返回的数据:
    # 1.数据库表中的每条数据
    # 2.当前页数
    # 3.总结果数
    # 4.总页数
    # 最终传递给前端的数据
    resultDic = {
        'data': dataList,
        # 当前页数
        'page': page,
        # 总数据量
        'total': result.total,
        # 总页数
        'totalPage': result.pages,
        # 当前搜索的内容
        'word': word
    }
    return render_template('search_template.html',data=resultDic)

if __name__ == '__main__':
    # 启动服务器
    app.run()

但是结果一直报错,不知道怎么更改

img

img


这页面没有呢,还是路径有问题检查一下,实在不会我远程手把手教你解决

问题点: 项目运行时,找不到模板,导致TemplateNotFound错误.
原理: 在项目下创建 templates 文件夹,将模板放到该文件夹下,project会自动从该文件夹下取模板
解决办法:
①确认项目下, templates 文件夹是否有index.html文件,如果没有就创建一个index.html.
②如果templates 文件夹存在index.html文件,那就是项目运行时出现查找问题,将文件名改成文件的绝对路径.

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7691223
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:python flask实战订餐系统微信小程序-55訂單頁面數據的加載及提交訂單請求
  • 除此之外, 这篇博客: Python 使用Flask传输视频流中的 构建实时视频流 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    一个简单的FlaskWeb程序,提供Motion JPEG流,注意Motion JPEG应用广泛。这种方法延迟低,但质量不是最好的,因为 JPEG 压缩对于运动视频不是很有效。
    从摄像机中获取视频帧:

    from time import time
    
    class Camera(object):
        def __init__(self):
            self.frames = [open(f + '.jpg', 'rb').read() for f in ['1', '2', '3']]
    
        def get_frame(self):
            return self.frames[int(time()) % 3]
    

    上面一部分代码是实例,针对没有摄像头设备的进行调试,通过在读取工程下面的图像来构建图像流。

    #!/usr/bin/env python
    from flask import Flask, render_template, Response
    from camera import Camera
    
    app = Flask(__name__)
    
    @app.route('/')
    def index():
        return render_template('index.html')
    
    def gen(camera):
        while True:
            frame = camera.get_frame()
            yield (b'--frame\r\n'
                   b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n')
    
    @app.route('/video_feed')
    def video_feed():
        return Response(gen(Camera()),
                        mimetype='multipart/x-mixed-replace; boundary=frame')
    
    if __name__ == '__main__':
        app.run(host='0.0.0.0', debug=True)
    

    此应用程序定义了一个Camera负责提供帧序列的类。前端HTML内容:

    <html>
      <head>
        <title>Video Streaming Demonstration</title>
      </head>
      <body>
        <h1>Video Streaming Demonstration</h1>
        <img src="{{ url_for('video_feed') }}">
      </body>
    </html>
    

    video_feed路由中调用gen生成器函数,该函数调用```Camera``类来获取视频流。整个流程都是比较简单。然而使用流也有一些限制,当Flask应用程序处理常规请求的时候,请求周期很短。Web Worker接受请求,调用处理函数并最终返回响应给客户端。当客户端接收到的是流,那么需要在流传输期间,客户端要保持连接。另一方面当客户端断开连接的时候,服务端可能也在一直给客户端提供服务,难以关闭流的传输,同时该服务只能提供给相同Web Worker数的客户端。有一些方法能够克服以上的问题,那就是使用协程或者多线程。接下来看看如何对上面的程序进行优化。

  • 您还可以看一下 黄棒清老师的python flask实战订餐系统微信小程序课程中的 登录版本号访问记录错误处理记录功能添加及优化小节, 巩固相关知识点

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^