python flask server 接收post数据注意

news2024/11/25 14:02:54

前面写了两篇文章,结果错误不少,经过修正,改了很多错误

1 跨域

加上以下两条

from flask_cors import CORS
from flask_cors import cross_origin

以下让整个全景跨域

CORS(app, supports_credentials=True)

2 secret_key

加上secret_key 防止session 报错

app.secret_key='kdjklfjkd87384hjdhjh'

3 接收python 数据

@app.route('/project/add', methods=['POST'])
def add_entry():
    #if not session.get('logged_in'):
    #    abort(401)
    print("data recv !!!!!!!!!!!!!!!!!!!!!!")
    data=request.get_data()
    print("data recv 2!!!!!!!!!!!!!!!!!!!!!!")
    data = data.decode('utf-8')
    data=json.loads(data)
    print("data recv 3!!!!!!!!!!!!!!!!!!!!!!")
    pname = data.get('projectname')
    num= data.get('projectname')
    memo = data.get('memo')
    g.db.execute('insert into project(projectname,picnum,memo) values (?,?,?)',
    #             [request.form['projectname'], request.form['picnum'],request.form['memo'] ])
                  [pname,num,memo])
    g.db.commit()
    flash('New project was successfully posted')
    return "{'ret':ok}"

其中需要data.decode 去解码utf-8 编码,去掉前面的 b 这个多余的字节。

4 改成非develop

去掉flask develop的警告

    server = pywsgi.WSGIServer(('0.0.0.0', 5000), app)
    server.serve_forever()

这样要把gevent装上
pip install gevent

5 发送端测试

发送端使用以前的代码,注意的是:发送的时候写上 json = data,不要写成 data = data,以前我的写法是错误的。

import json
import requests
import time
headers = {'Content-Type': 'application/json'}
data = {
    "projectname":"four screen",
    "picnum":8,
    "memo":"test"
}
try:
	r = requests.post("http://127.0.0.1:5000/project/add", json=data, headers=headers)
	print(r.text)
except requests.exceptions.ConnectionError:
	print('connectionError')	
time.sleep(1)

6 代码清单

以下代码清单错误减去了不少,数据库增加数据正常
在这里插入图片描述
服务端和测试客户端正常
在这里插入图片描述


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
from flask_cors import CORS
from flask_cors import cross_origin
import json
from gevent import pywsgi
# configuration
DATABASE = './project.db'
DEBUG = True



app = Flask(__name__)
app.config.from_object(__name__)

app.config.from_envvar('FLASKR_SETTINGS', silent=True)
app.secret_key='kdjklfjkd87384hjdhjh'

CORS(app, supports_credentials=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)
   print("data recv !!!!!!!!!!!!!!!!!!!!!!")
   data=request.get_data()
   print("data recv 2!!!!!!!!!!!!!!!!!!!!!!")
   #get_Data = get_Data.decode('utf-8')
   data = data.decode('utf-8')
   data=json.loads(data)
   print("data recv 3!!!!!!!!!!!!!!!!!!!!!!")
   pname = data.get('projectname')
   num= data.get('projectname')
   memo = data.get('memo')
   g.db.execute('insert into project(projectname,picnum,memo) values (?,?,?)',
   #             [request.form['projectname'], request.form['picnum'],request.form['memo'] ])
                 [pname,num,memo])
   g.db.commit()
   flash('New project was successfully posted')
   return "{'ret':ok}"
   #return redirect(url_for('show_first'))


@app.route('/project/del/<id>', methods=['POST'])
#@cross_origin(supports_credentials=True)
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()
   server = pywsgi.WSGIServer(('0.0.0.0', 5000), app)
   server.serve_forever()

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

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

相关文章

系列五、RocketMQ集群搭建

一、概览 二、集群特点 2.1、NameServer NameServer是一个几乎无状态节点&#xff0c;可集群部署&#xff0c;节点之间无任何信息同步。 2.2、Broker Broker部署相对复杂&#xff0c;Broker分为Master与Slave&#xff0c;一个Master可以对应多个Slave&#xff0c;但是一个Sla…

客户端是win10远程连接ubuntu后图形化执行程序verdi

一、安装xlaunch 1.1 搜索vcxsrv安装即可 1.2 对vcx进行配置&#xff0c;参考 将ubuntu终端打开的GUI图形界面窗口显示在windows上_heusjh的博客-CSDN博客https://blog.csdn.net/m0_51194302/article/details/128768284#:~:text%E5%B0%86ubuntu%E7%BB%88%E7%AB%AF%E6%89%93%…

天翎MyApps低代码平台案例分享—百川信保安服务综合管理系统

项目背景&#xff1a;百川信&#xff08;北京&#xff09;信息服务有限公司&#xff08;以下简称“百川信”&#xff09;成立于2014年&#xff0c;是一家专注于为安保行业提供高效、全场景、智能化协同办公管理与服务的科技公司。作为国内领先的数字安保解决方案与应用服务提供…

winform去掉最小化后左下角窗口,托盘处理

去掉如图的窗口&#xff1b; public partial class FormZpenSample : Form{public FormZpenSample(){InitializeComponent();#region 托盘处理//隐藏ui this.WindowState FormWindowState.Minimized;//隐藏任务栏区图标this.ShowInTaskbar false;//不显示this.Hide();//图标显…

masm32 链接问题

当我参考资料学习Windows环境下32位汇编时&#xff0c;编译倒没什么问题&#xff0c;可是链接就不对了。 网上也没找到解决办法&#xff0c;经过后来思考了一下&#xff0c;会不会是link.exe这个玩意有问题&#xff1f;比如有多个&#xff1f; 所以使用link的绝对路径试了一下…

使用json-server 模拟后端数据

1. json-server是什么 json-server 是一个 Node 模块&#xff0c;运行 Express 服务器&#xff0c;你可以指定一个 json 文件作为 api 的数据源。 简单的说&#xff0c;它可以模拟小型后台接口&#xff0c;在一个JSON文件中操作数据&#xff0c;是基于的node.js的一个模块。 比…

【MySQL】MySQL分区表详解

本文已收录至Github&#xff0c;推荐阅读 &#x1f449; Java随想录 文章目录 分区表介绍表分区的优缺点和限制 分区适用场景分区方式分区策略RANGE分区LIST分区HASH分区KEY分区COLUMNS 分区 常见分区命令是否支持分区创建分区表向分区表添加新的分区删除指定的分区重新组织分…

2 增长渐进阶求解

2 增长渐进阶求解 作者: 赵晓鹏时间限制: 1S章节: 递归与分治 #include<iostream> using namespace std;int main() {cout << "A"<<endl ; cout << "A"<<endl ; cout << "A"<<endl ; cout << …

Linux 学习记录49(QT篇)

Linux 学习记录49(QT篇) 本文目录 Linux 学习记录49(QT篇)一、事件处理机制1. 什么是事件2. 如何处理事件(1. 当事件发生时(2. QObject类的子类 3. 事件处理函数由来4. 鼠标和键盘事件5. 键盘按键示例 二、定时器1. 定时器事件2. 代码实现3. 自制文本闹钟 三、绘制事件&#xf…

Centos7离线模式安装Redis6.2.13详细步骤(rpm方式)

本篇文章主要介绍在CentOS7服务器中安装Redis6.2.13&#xff0c;前提是需要有gcc的环境&#xff0c;那么在此我也会向大家介绍gcc的详细安装过程&#xff0c;参考了很多其它相关博客&#xff0c;但有些博主的文章可能是搬运的&#xff0c;导致我在实操时出现报错&#xff0c;那…

CVE-2023-23752-Joomla权限绕过漏洞研判分析

CVE-2023-23752-Joomla权限绕过漏洞分析 简介 Joomla是一个开源免费的内容管理系统&#xff08;CMS&#xff09;&#xff0c;基于PHP开发。 在其4.0.0版本到4.2.7版本中&#xff0c;存在一处属性覆盖漏洞&#xff0c;导致攻击者可以通过恶意请求绕过权限检查&#xff0c;访问…

Go轻量级线程Goroutine

文章目录 Goroutinegoroutine的创建GPM介绍goroutine调度 道阻且长&#xff0c;行则将至&#xff0c;行而不辍&#xff0c;未来可期&#x1f31f;。人生是一条且漫长且充满荆棘的道路&#xff0c;一路上充斥着各种欲望与诱惑&#xff0c;不断学习&#xff0c;不断修炼&#xff…

第二十一章:用户与权限管理

第二十一章&#xff1a;用户与权限管理 21.1&#xff1a;用户管理 登录MySQL服务器 # 语法 mysql -h hostname|hostIP -P port -u username -p DatabaseName -e "SQL语句"; # -h参数 后面接主机名或者主机IP&#xff0c;hostname为主机&#xff0c;hostIP为主机IP。…

请求响应-简单参数的接受

请求响应 请求&#xff08;HttpServletRequest&#xff09;&#xff1a;获取请求数据响应&#xff08;HttpServletResponse&#xff09;&#xff1a;设置响应数据BS架构&#xff1a;Browser/Server&#xff0c;浏览器/服务器架构。客户端只需要浏览器&#xff0c;应用程序的逻…

BCD码与二进制码的区别与联系

二进制数是整串二进制编码表示一个整数&#xff0c;BCD码是用二进制码逐一表示0&#xff5e;9的整数。 (本笔记适合对整数进制编码有一定了解&#xff0c;熟悉二进制数编码的编程爱好的 coder 翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org…

【python】制作一个串口工具(下)!

上一章节我们说了UI界面的设计&#xff0c;这一节来说下怎样实现其功能。 一.实例演示 1.创建一个.py文件&#xff0c;以下代码用来实现获取所有的串口信息&#xff1a; import serial import serial.tools.list_portsfrom PyQt5.QtWidgets import QComboBoxclass My_ComBoBo…

使用Feign进行微服务之间的接口调用:Spring Cloud Alibaba中的声明式服务调用

一、Feign介绍 Feign是一个声明式的HTTP客户端框架&#xff0c;用于简化微服务架构中服务之间的通信。它是Spring Cloud框架的一部分&#xff0c;旨在提供一种优雅且易于使用的方式来定义和调用HTTP请求。 Feign的设计目标是让服务之间的通信变得更加简单和直观。通常情况下&am…

EmEditor自定义快捷键之下一个标签页上一个标签页

EmEditor自定义快捷键 有好几种叫法 下一个标签页上一个标签页 下一个选项卡上一个选项卡 在这里个软件它叫’右侧文档’ ‘左侧文档’ 工具 - 所有配置的属性 - 键盘 - 窗口 - 类别: 选’窗口’ - 依次选 ‘右边的文档’ ‘左边的文档’ 按下新的快捷键 - 是每次只按一个键(不…

简单的复习下与 CSS Flex 布局相关的几个关键属性

揭开align-content、justify-content、align-items和justify-items的神秘面纱&#xff0c;解释它们各自的功能以及在不同的情境下如何使用。 在过去几年中&#xff0c;由于弹性盒子和网格布局的演变&#xff0c;CSS布局设计的艺术发生了重大变化。而这一变革的核心&#xff0c;…

CS231N assignment3 RNN

对作业进行一些形象的解释 首先是def rnn_step_forward&#xff1a; 这里的t时刻其实就是一个句子里面的单词数&#xff0c;为了方便会统一到一个最长长度&#xff0c;对于比这个长度短的部分用null进行填充&#xff0c;并且在方法内部会让Null不进行传播和梯度计算。 我们最…