python flask sqlite http服务

news2024/11/27 8:47:38

python flask 服务

为了让拼接项目能够简单实用http服务,用python flask 来做一个http服务,使用python的原因是拼接项目本身很多人工智能的服务是用python来写。数据库为了简单实用sqlite,python自带sqlite3 ,很方便

db.sql

CREATE TABLE if not exists project(
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  projectname TEXT UNIQUE NOT NULL,
  picnum TEXT NOT NULL,
  memo TEXT,
  created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
 
CREATE TABLE if not exists rtsp(
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  projectid INTEGER NOT NULL,
  created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  urls TEXT NOT NULL,
  picpath TEXT NOT NULL,
  FOREIGN KEY (projectid) REFERENCES project(id)
);

上面的表在不存在的时候就会创建,存成db.sql

show me the code

代码如下

from __future__ import with_statement
from contextlib import closing  
import sqlite3
from flask import Flask, request, session, g, redirect, url_for, \
    abort, render_template, flash,jsonify
 
# configuration
DATABASE = './project.db'
DEBUG = True

 
app = Flask(__name__)
app.config.from_object(__name__)
 
app.config.from_envvar('FLASKR_SETTINGS', silent=True)
 
 
def connect_db():
    return sqlite3.connect(app.config['DATABASE'])
 
 
def init_db():
    with closing(connect_db()) as db:
        with app.open_resource('db.sql',"r") as f:
            #str = f.read()
            #print(str)
            db.cursor().executescript(f.read())
        db.commit()
 
 
@app.before_request
def before_request():
    g.db = connect_db()
 
 
@app.after_request
def after_request(response):
    g.db.close()
    return response
 
 
@app.route('/')
def show_first():
    return "this is a test"

@app.route('/project', methods=['GET'])
def show_project():
    cur = g.db.execute('select id,projectname,picnum,memo,created from project order by id desc')

    entries = [dict(id=row[0], projectname=row[1],picnum= row[2],memo=row[3],created=row[4]) for row in cur.fetchall()]
    return jsonify(entries)
 
@app.route('/project/add', methods=['POST'])
def add_entry():
    #if not session.get('logged_in'):
    #    abort(401)
    g.db.execute('insert into project (projectname,picnum,memo) values (?,?,?)',
                 [request.form['projectname'], request.form['picnum'],request.form['memo'] ])
    g.db.commit()
    flash('New project was successfully posted')
    return redirect(url_for('show_first'))


@app.route('/project/del/id>', methods=['POST'])
def del_entry():
    #if not session.get('logged_in'):
    #    abort(401)
    g.db.execute('delete from project where id = ?',[id])
    g.db.commit()
    flash('project was successfully delete')
    return redirect(url_for('show_first'))


 #需要登录或者单点登录的时候把以下代码准备加上
@app.route('/login', methods=['GET', 'POST'])
def login():
    error = None
    if request.method == 'POST':
        if request.form['username'] != app.config['USERNAME']:
            error = 'Invalid username'
        elif request.form['password'] != app.config['PASSWORD']:
            error = 'Invalid password'
        else:
            session['logged_in'] = True
            flash('You were logged in')
            return redirect(url_for('show_first'))
    return render_template('login.html', error=error)
 
  #需要登录或者单点登录的时候把以下代码准备加上
@app.route('/logout')
def logout():
    session.pop('logged_in', None)
    flash('You were logged out')
    return redirect(url_for('show_first'))
 
 
if __name__ == '__main__':
    init_db()
    app.run()

执行

访问主页
在这里插入图片描述

执行project的时候,出来项目数据,这是一条我写在sqlite中的数据

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/722199.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AcWing 98. 分形之城

题目链接:AcWing 98. 分形之城 问题描述 分析 这一道题看起来很麻烦,其实就是比较麻烦。 这是一道递归坐标变换的问题,坐标变换比较难想,建议自己动手画一画容易明白一些。 首先是城市等级 n n n 与总点数的关系,不难发现总点数…

golang Redis的新数据类型github.com/go-redis/redis/v8实践

Redis的新数据类型# 在redis中,后面添加了几个比较高级的数据类型 hyperloglog基数统计、GEO存储地理位置、bitmap位图、stream为消息队列设计的数据类型 这 4 种数据类型。 HyperLogLog类型# HyperLogLog简介# HyperLogLog 是一种用于数据统计的集合类型&#x…

亚马逊云科技Zero ETL数据库,助力企业走向数据驱动的业务增长之路

据Forrester研究,相对于数据应用不够成熟的公司,那些有效获取业务洞察的公司,有高达8.5倍的可能性实现至少20%的收入增长。然而,要实现这一增长,需要简化一项流程——在数据分析前管理和准备好数据。这就是为什么亚马逊…

16.电容触摸按键

1.电容触摸按键介绍: R是外接的充电电阻, Cs是没有触摸按下的触摸感应区和四周覆铜区域的一个杂散的电容;当使用手指去触摸感应区时,手指和感应区形成一个电容Cx,开关是电容放电的一个开关,在实际设计中是利…

Ubuntu 22.04.2 LTS LTS x86_64 安装 stable-diffusion-webui 【2】基本版本完结。

前篇 Ubuntu 20.04 LTS x86_64 安装 stable-diffusion-webui_hkNaruto的博客-CSDN博客 内容太多,分第二篇继续 中途重装了机器,20.04 ,apt upgrade后自动升级到22.04.2 现状:起来了,又没完全起来 启动日志 (stab…

如何在 Linux 中将本地网络 IP 设置为静态的

文章目录 对于普通的 Linux 操作系统对于 Red Hat Enterprise Linux 9 笔者的运行环境: CentOS 8 Red Hat Enterprise Linux 9 在 Linux 中将本地网络 IP 设置为静态的,只需要在那台 Linux 上设置即可。为了方便,这里笔者使用了 Xshell 来远…

手写操作系统--主引导扇区以及内核加载器

在CPU上电后,会自动将cs:ip置为f000:fff0,下图就是一个计算机刚上电的模拟: ffff00这里开始的代码是BIOS自检,检查计算机的硬件完备性,做完这一切后将第一个扇区的内容复制到0x7c00的位置,并从0x7c00位置执行代码&…

第五章 逻辑回归

第五章 逻辑回归 Logistic回归的⼀般过程 收集数据:采⽤任意⽅法收集数据。准备数据:由于需要进⾏距离计算,因此要求数据类型为数值型。另外,结构化数据格式则最佳。分析数据:采⽤任意⽅法对数据进⾏分析。训练算法&…

Golang每日一练(leetDay0118) 扁平化嵌套列表迭代器、整数拆分

目录 341. 扁平化嵌套列表迭代器 Flatten Nested List Iterator 🌟🌟 343. 整数拆分 Integer Break 🌟🌟 🌟 每日一练刷题专栏 🌟 Rust每日一练 专栏 Golang每日一练 专栏 Python每日一练 专栏 C/…

vscode工作区实现机制

工作区是编辑器的重要部分,它承载着编辑器和本地文件的连接,对文件增、删、改、查。下面我会介绍vscode工作区的创建。同样我们知道vscode软件打开的时候没有默认工作区,这里我对它进行了改造,软件启动时指向默认工作区。 工作区目…

提高腾讯QQ(电脑版)语音通话、视频聊天和远程协助的稳定性的方法

一、背景说明 腾讯QQ默认使用的通讯协议是UDP。但是各大运营商将UDP的优先级设置为最低,导致UDP数据包经常被丢弃。导致腾讯QQ在语音通话、视频聊天和远程协助的时候,会出现连接不上、卡顿和断线,非常不稳定。我们可以手动将通讯协议调整为TC…

用Python实现自动化交易:从趋势到收益

在现代金融市场中,自动化交易已经成为越来越流行的一种方式。相比于传统的手工交易方式,自动化交易更加高效、精准、快速且免除了人为因素的影响。而Python作为一种高级编程语言,凭借其简单易学、灵活性强的优势逐渐成为自动化交易中最受欢迎…

Ubuntu下Go语言TCP广播服务器实现

最近在学习Go语言网络编程,突然想到很久以前的用C语言写过的TCP广播聊天程序,然后就用Go尝试写了一遍,在此做个记录。 目录 1.广播结构 2.实现效果 3.源码 4.Go语言学习参考网站 1.广播结构 2.实现效果 服务器: 客户端1&…

小程序 web-view h5页面背景音乐自动播放

/*** 年度账单-登录首页*/ import React,{useEffect} from react import swiper/swiper-bundle.min.css import styles from ./styles.less import bgm from ./bgm2.mp3 // 主体 const annualAccountLoginIndex (props) > {const goAnnualAccount ()>{const {location: …

Java Web Tomcat 23.7.5

Tomcat 1, Tomcat 1.1 简介 1.1.1 什么是Web服务器 Web服务器是一个应用程序(软件),对HTTP协议的操作进行封装,使得程序员不必直接对协议进行操作,让Web开发更加便捷。主要功能是"提供网上信息浏览服务"…

[Python系列] Python虚拟环境Virtualenv

1. 什么是Virtualenv Python virtualenv 是一个用于创建和管理虚拟环境的工具。它可以帮助开发者在不同的项目中使用不同的 Python 版本和包,而不会相互干扰。使用 virtualenv,可以轻松地创建一个独立的 Python 环境,在其中安装所需的包和版本…

【网络】思科网络vlan配置+单臂路由

文章目录 前言一、vlan(虚拟局域网)二、配置vlan配置交换机0配置交换机1(和交换机0相同)配置计算机:测试联通性 三、单臂路由配置R0配置交换机1测试配置: 前言 VLAN(Virtual Local Area Networ…

力扣 491. 递增子序列

题目来源:https://leetcode.cn/problems/non-decreasing-subsequences/description/ 回溯三部曲(来源代码随想录): 递归函数参数:求子序列,很明显一个元素不能重复使用,所以需要startIndex&…

2023年 vue使用腾讯地图搜索、关键字输入提示、地点显示

先看结果 vue 在public文件下的index.html文件中引入&#xff1a; <script src"//map.qq.com/api/js?v2.exp&key你自己的key"></script><script src"https://map.qq.com/api/gljs?v1.exp&librariesservice&key你自己的key"&…

【保姆级教程】PyCharm通过SSH远程连接ModelArts

文章目录 一、创建Notebook二、配置SSH三、配置远程Python解释器四、成果展示 一、创建Notebook 首先&#xff0c;找到云资源下面的 ModelArts&#xff0c;然后点击并进入 ModelArts控制台。 在ModelArts控制台中&#xff0c;点击开发环境下的 Notebook 。然后点击创建&#x…