【SH】在Ubuntu Server 24中基于Python Web应用的Flask Web开发(实现POST请求)学习笔记

news/2024/12/22 18:18:15 标签: ubuntu, flask, python, 后端, web, post
webkit-tap-highlight-color: rgba(0, 0, 0, 0);">

文章目录

  • Flask
  • 开发环境搭建
    • 保持Flask运行
    • Debug调试
  • 路由和视图
    • 可变路由
  • 请求和响应
    • 获取请求信息
    • Request属性
    • 响应状态码
    • 常见状态码
    • Cookie
    • Session
  • 表单
    • GET请求
    • POST请求

Flask

在用户使用浏览器访问网页的过程中,浏览器首先会发送一个请求到服务器,服务器接收到请求之后,会将请求转交给Flask进行处理。Flask会对用户所访问的URL进行解析,然后找到相应的响应内容,将其返回到浏览器。

开发环境搭建

参考文档:【SH】Ubuntu Server 24搭建Web服务器访问Python程序研发笔记

保持Flask运行

开启Ubuntu服务器,切换到项目目录,激活虚拟环境,运行app.py文件。如果开启了debug=True参数,只需要启动一次,后续更改了app.py文件后会自动重启,挺方便的,当然如果修改后运行失败,重启也会失败的。😄

sh@sheephero:~$ cd dip_project/
sh@sheephero:~/dip_project$ source dipenv/bin/activate
(dipenv) sh@sheephero:~/dip_project$ python app.py

app.py文件:

python">from flask import Flask

app = Flask(__name__)

@app.route("/")
def index():
    return "<h1>Hello World!</h1>"  
   
if __name__=='__main__':
    # 运行Flask应用,监听默认端口5000
    app.run(debug=True, host='0.0.0.0')

运行情况:

保持Flask运行

Debug调试

当Python程序运行出现出错的时候,就会出现如下界面,非常方便开发者进行调试!
调试

Debug调试

路由和视图

仔细观察app.py 中的代码,hello 函数被 @app.route("/") 装饰器装饰,该装饰器用于定义路由,确定URL与Python函数之间的映射。而被装饰的hello函数便是视图函数,用于返回用户请求URL的响应内容。

可变路由

装饰器这部分,可以用<>定义一个可变参数,同时在视图函数()中添加这个参数,便可以设置动态路由,动态响应。

python">from flask import Flask

app = Flask(__name__)

@app.route("/")
def index():
    return "<h1>Hello World!</h1>"
    
@app.route("/user/<name>")
def user(name):
    return "<h1>Hello, {}!</h1>".format(name)
    
if __name__=='__main__':
    # 运行Flask应用,监听默认端口5000
    app.run(debug=True, host='0.0.0.0')

动态路由
运行情况

请求和响应

HTTP的核心就是【请求】和【响应】,其性质为无状态协议,对事务处理没有记忆能力。这意味着每一次交互都是完全独立的。

获取请求信息

路由和视图函数部分代码:

python">@app.route("/info")
def info():
    # 从request对象中获取用户请求信息
    info_str = f"""
    用户IP:{request.remote_addr} <br/>
    请求方式:{request.method} <br/>
    请求表单:{request.form} <br/>
    用户浏览器:{request.user_agent} <br/>
    用户Cookie:{request.cookies} <br/>
    """
    return info_str

Request属性

属性名称数据类型说明
methodstr请求的提交方式
pathstrURL中的访问路径
full_pathstrURL中的访问路径,包含数据
remote_addrstr浏览器的IP地址
urlstr请求的完整URL
base_urlstr请求的URL,不含数据
url_rootstr请求的根URL,不含路径
user _ agentstr浏览器及操作系统信息
argsdict请求中提交表单的GET参数
formdict请求中提交表单的POST参数
filesdict请求提交所上传的文件
cookiesdict浏览器Cookie数据

响应状态码

每次的HTTP交互中,都会响应状态码。通过浏览器的F12可以查看响应状态码。

路由和视图函数部分代码:

python">@app.route("/user/<name>")
def user(name):
    if name in ['世界','羊大侠','SheepHero']:
        return "<h3>Hello, {}!</h3>".format(name) # 正常响应默认200
    else:
        return f'用户 {name} 不存在!', 404

运行情况

常见状态码

状态码信息说明
200OK一切正常
301Moved Permanently重定向
400Bad Request客户端请求错误
403Forbidden无权限访问
404Not Found找不到页面
405Method Not Allowed客户端使用了不支持的提交方法
500Internal Server Error服务器端出错
502Bad Gateway代理与服务器之间访问出错

Cookie

HTTP每次的交互都是独立的,无法存储状态数据,Cookie就是为了解决这个问题。

Cookie的存储容量有限,一般不会超过4KB。因此,Cookie只能存储少量数据,如用户的一些偏好设置、临时信息等。当用户访问需要记录状态数据的网页时,服务器会在HTTP响应包头部加入设置Cookie的指令,浏览器接收到响应包后,将Cookie存储到本地,当用户再次访问页面时,浏览器会将Cookie数据加入HTTP请求包头部,从而使服务器获取到状态信息。

由于Cookie是存放在本地的,可以被查看及修改,安全性较低,所以一般不用来存储敏感数据。

python">from flask import Flask, request, make_response
import time

app = Flask(__name__)
    
@app.route('/visit')
def visit():
    # 从Cookie获取最后访问时间
    last_visit_time = request.cookies.get('last_visit_time', '首次访问')
    resp = make_response(f'最后访问的时间:{last_visit_time}')
    # 获取服务器当前时间并设置Cookie
    last_visit_time = time.strftime('%Y-%m-%d %H:%M:%S')
    # max_age用户设置Cookie的有效期(秒)
    resp.set_cookie('last_visit_time', last_visit_time, max_age=86400)
    return resp

if __name__=='__main__':
    # 运行Flask应用,监听默认端口5000
    app.run(debug=True, host='0.0.0.0')

Cookie运行情况

同样的,在浏览器里面按【F12】点击Network,点击Cookies就可以查看Cookies信息。
没有设置Cookie过期时间的情况下,当用户关闭浏览器(Chrome)时,Cookie将会被自动清除。

Cookie信息

Session

Session与Cookie的作用相似,都用于存储状态数据。不同的是,Session只能在服务器端进行管理,用户在本地无法对其进行修改,因而安全性较高。Session一般用于存储用户登录状态等对安全性要求较高的信息。
为了保证数据的安全性,Session一般有以下两种存储方式。
(1). 使用Cookie记录一个随机生成的session_id,session_id用于记录Session与用户的映射关系,所有数据存储于服务器端,用户无法修改数据。
(2). 所有Session数据都在服务器端加密,然后存储在浏览器的Cookie中,若用户拥有加密算法及密钥,则Session数据可以被用户修改。​(Flask默认以这种方式存储Session​)

python">from flask import Flask, session
import time

app = Flask(__name__)

# 在使用Session之前,需要初始化 SECRET_KEY
app.config['SECRET_KEY'] = 'SheepHero' # 自定义
@app.route('/sign_in')
def sign_in():
    # 设置Session持久性存储数据,关闭浏览器记录还会保存在服务器中
    session.permanent = True
    # 从Session获取最后的签到时间及签到次数
    sign_in_time = session.get('sign_in_time','首次访问')
    sign_in_count = session.get('sign_in_count', 0)
    # 设置Session字典
    session['sign_in_time'] = time.strftime('%Y-%m-%d %H:%M:%S')
    session['sign_in_count'] = sign_in_count + 1
    ret_str = f'上次签到时间:{sign_in_time} <br/> 这是第 {sign_in_count} 次签到'
    return ret_str

if __name__=='__main__':
    # 运行Flask应用,监听默认端口5000
    app.run(debug=True, host='0.0.0.0')

有了Session,便可以实现安全的用户状态数据保存,从而实现登录功能。

在这里插入图片描述

表单

通过表单让用户和服务器进行数据交互。

python">from flask import Flask, request
import time
app = Flask(__name__)

# 在使用表单前,需要初始化 SECRET_KEY
app.config['SECRET_KEY'] = 'SheepHero' # 自定义
# 可以通过GET和POST两种方式获取表单数据
@app.route('/form', methods=['GET', 'POST'])
def form():
    # args用户获取GET方式提交的数据
    msg_get = request.args.get('msg_get')
    # form用户获取POST方式提交的数据
    msg_post = request.form.get('msg_post')
    return f'GET数据:{msg_get} <br/> POST数据:{msg_post}'
    
if __name__=='__main__':
    # 运行Flask应用,监听默认端口5000
    app.run(debug=True, host='0.0.0.0')

GET请求

测试GET请求,浏览器输入http://172.16.37.37:5000/form?msg_get=你好!即可

get测试情况

POST请求

测试POST请求,可以编写一个Python脚本,模拟POST请求

python"># 保存为post.py文件
import requests
url = 'http://172.16.37.37:5000/form'
payload = {
    'name':'羊大侠',
    'alias':'SheepHero',
    'msg_post':'Py羊大侠'
}
response = requests.post(url, data=payload)
print(response)
print(response.text)

<a class=post测试情况" />


http://www.niftyadmin.cn/n/5795693.html

相关文章

GIT与github的链接(同步本地与远程仓库)

1.官网下载GIT Git - 安装 Git 2.GIT生成密钥 2.1 打开gitbash配置邮箱与用户名&#xff08;非初次使用GIT跳过这一步&#xff09; git config --global user.name "你的用户名" git config --global user.email "你的邮箱" 2.2 生成ssh密匙 1&#xff…

MySQL通过日志恢复数据的步骤

试验环境&#xff1a;Windows Server2012 r2、MySql-8.0.27-winx64。 1、先检查MySQL有没有开启binlog日志 通过下面的SQL命令查看MySQL是否开启日志以及日志文件的位置&#xff1a; show variables like %log_bin% 执行结果如下图所示&#xff1a; 图中&#xff0c;log_bi…

重拾设计模式--备忘录模式

文章目录 备忘录模式&#xff08;Memento Pattern&#xff09;概述定义&#xff1a; 作用&#xff1a;实现状态的保存与恢复支持撤销 / 恢复操作 备忘录模式UML图备忘录模式的结构原发器&#xff08;Originator&#xff09;&#xff1a;备忘录&#xff08;Memento&#xff09;&…

Pytorch | 利用MI-FGSM针对CIFAR10上的ResNet分类器进行对抗攻击

Pytorch | 利用MI-FGSM针对CIFAR10上的ResNet分类器进行对抗攻击 CIFAR数据集MI-FGSM介绍背景算法原理 MI-FGSM代码实现MI-FGSM算法实现攻击效果 代码汇总mifgsm.pytrain.pyadvtest.py 之前已经针对CIFAR10训练了多种分类器&#xff1a; Pytorch | 从零构建AlexNet对CIFAR10进行…

sqlserver新建用户并分配对视图的只读权限

1、--创建了一个数据库角色&#xff0c;名称为:[seeview] exec sp_addrole seeview 2、--指定可查看的视图 GRANT SELECT ON view_getInventoryInfo TO seeview --GRANT SELECT ON view_getInventoryInfo2 TO seeview 3、--添加只允许访问指定视图的用户: exec sp_addlogin ‘登…

Type-C接口电热毯方案

Type-C接口电热毯是一种结合了最新科技元素的取暖产品&#xff0c;它将Type-C接口技术应用于电热毯上&#xff0c;为用户带来了更加便捷、安全、智能的取暖体验。以下是对Type-C接口电热毯的详细介绍&#xff1a; 一、Type-C接口的特点 Type-C接口是一组对称的连接器&#xff…

机器学习系列(一)——K-近邻算法

1. 算法定义 KNN 算法属于基于实例的机器学习方法。在对未知数据进行分类或回归之前&#xff0c;我们不需要对数据进行显式的训练或建立复杂的模型。它的核心思想是&#xff1a;对一个新的样本点&#xff0c;寻找在特征空间上与其最相似的 K 个已知数据点&#xff0c;采取“投…

重拾设计模式--外观模式

文章目录 外观模式&#xff08;Facade Pattern&#xff09;概述定义 外观模式UML图作用 外观模式的结构C 代码示例1C代码示例2总结 外观模式&#xff08;Facade Pattern&#xff09;概述 定义 外观模式是一种结构型设计模式&#xff0c;它为子系统中的一组接口提供了一个统一…