郑州靠谱建网站公司/江苏seo技术教程
1 flask介绍
Flask是一个非常小的Python Web框架,被称为微型框架;只提供了一个稳健的核心,其他功能全部是通过扩展实现的;意思就是我们可以根据项目的需要量身定制,也意味着我们需要学习各种扩展库的使用。
2 python虚拟环境搭建
python虚拟环境管理方法: 1.virtualenv 2.Virtualenvwrapper 3.conda 4.pipenv
3 pipenv使用
┌──(kali㉿kali)-[~/Desktop/python_code] └─$ ls flask1 ┌──(kali㉿kali)-[~/Desktop/python_code] └─$ cd flask1 ┌──(kali㉿kali)-[~/Desktop/python_code/flask1] └─$ pipenv shell
┌──(flask1-l5Pm-i-x)─(kali㉿kali)-[~/Desktop/python_code/flask1] └─$ ls Pipfile #Pipfile 等于安装的插件包名 ┌──(flask1-l5Pm-i-x)─(kali㉿kali)-[~/Desktop/python_code/flask1] └─$ cat Pipfile 安装 flask ┌──(flask1-l5Pm-i-x)─(kali㉿kali)-[~/Desktop/python_code/flask1] └─$ pipenv install flask
4 flask第一个应用
新建app.py
#!/usr/bin/env python3 from flask import Flask #初始化 app =Flask(__name__) @app.route('/') def index():return 'Hello World!' if __name__ == '__main__':app.run()
执行app.py
游览器效果
5 路由和视图函数
#!/usr/bin/env python3 # 这一行告诉系统使用哪个解释器来执行脚本,这里指定为 python3 from flask import Flask # 从flask模块中导入Flask类,用于创建Flask web应用程序实例 # 初始化 app = Flask(__name__) # 创建一个Flask应用程序实例,并赋值给变量app。__name__是当前模块的名字,代表应用程序的根路径 # 设置多个路由 @app.route('/') # 定义一个路由装饰器,当访问根路径'/'时,会调用下面的index函数 def index(): return 'Hello World!' # 定义一个视图函数index,当访问'/'路径时,返回'Hello World!'字符串 @app.route('/a') # 定义另一个路由装饰器,当访问'/a'路径时,会调用下面的add函数 def add(): return '1+1=2' # 定义一个视图函数add,当访问'/a'路径时,返回'1+1=2'字符串 @app.route('/user/<username>') # 定义一个带有动态部分的路由装饰器,'<username>'是一个动态部分,可以匹配任何字符串 def user_index(username): # 在函数中指明变量名称username,就能获取到通过路由传入的变量username return 'Hello {} '.format(username) # 定义一个视图函数user_index,该函数接受一个参数username,这是从路由动态部分获取的。函数返回'Hello '加上用户名 @app.route('/post/<int:post_id>') # 定义一个带有动态部分且类型指定的路由装饰器,'<int:post_id>'表示动态部分必须是整数类型 def show_post(post_id): return 'Post {} '.format(post_id) # 定义一个视图函数show_post,该函数接受一个整数类型的参数post_id,这是从路由动态部分获取的。函数返回'Post '加上文章ID if __name__ == '__main__': # 判断当前脚本是否作为主程序运行 app.run(debug=True)
6URL重定向
#!/usr/bin/env python3 # 导入 Flask 框架 from flask import Flask from flask import url_for from flask import redirect # 初始化 Flask 应用 app = Flask(__name__) # 设置路由到根路径 '/' @app.route('/') def index(): return 'Hello World!' # 返回欢迎信息 # 设置路由到 '/a' @app.route('/a') def add(): return '1+1=2' # 返回加法运算结果 # 设置路由到 '/user/<username>',其中 <username> 是一个动态部分 @app.route('/user/<username>') def user_index(username): # 在视图函数中通过参数获取路由中的动态部分 username return 'Hello {} '.format(username) # 返回包含用户名的欢迎信息 # 设置路由到 '/post/<int:post_id>',其中 <int:post_id> 是一个整数类型的动态部分 @app.route('/post/<int:post_id>') def show_post(post_id): return 'Post {} '.format(post_id) # 返回包含帖子ID的字符串 # 设置路由到 '/test' @app.route('/test') def test(): # 使用 url_for 函数生成路由的 URL,并打印出来 print(url_for('index')) # 打印根路径的 URL print(url_for('user_index', username='scj')) # 打印用户路径的 URL,传入用户名 'scj' print(url_for('show_post', post_id=1)) # 打印帖子路径的 URL,传入帖子ID 1 return 'test' # 返回测试字符串 # 设置路由到 '/<username>',其中 <username> 是一个动态部分 @app.route('/<username>') def hello(username): if username == 'handsomescj': return 'Hello {}' .format(username) # 如果用户名是 'handsomescj',则返回欢迎信息 else: return redirect(url_for('index')) # 否则重定向到根路径 # 主程序入口 if __name__ == '__main__': app.run(debug=True) # 运行 Flask 应用,并开启调试模式 请注意,代码中有个小的错误,app =Flask(__name__) 这一行应该去掉变量名 app 前的空格,修改为 app = Flask(__name__)。 在 Flask 应用中,注释是一个很好的习惯,它们可以帮助你和其他开发者理解代码的功能和逻辑。在编写代码时,记得添加足够的注释,尤其是在复杂的逻辑部分。
7模板渲染
python #!/usr/bin/env python3 # 导入 Flask 框架 from flask import Flask from flask import url_for from flask import redirect from flask import render_template # 初始化 Flask 应用 app = Flask(__name__) # 设置路由到根路径 '/' @app.route('/') def index(): return 'Hello World!' # 返回欢迎信息 # 设置路由到 '/a' @app.route('/a') def add(): return '1+1=2' # 返回加法运算结果 # 设置路由到 '/user/<username>',其中 <username> 是一个动态部分 @app.route('/user/<username>') def user_index(username): # 使用 render_template 函数渲染 'user_index.html' 模板,并传入变量 username return render_template('user_index.html', username=username) # 返回渲染后的页面 # 设置路由到 '/post/<int:post_id>',其中 <int:post_id> 是一个整数类型的动态部分 @app.route('/post/<int:post_id>') def show_post(post_id): return 'Post {} '.format(post_id) # 返回包含帖子ID的字符串 # 设置路由到 '/test' @app.route('/test') def test(): # 使用 url_for 函数生成路由的 URL,并打印出来 print(url_for('index')) # 打印根路径的 URL print(url_for('user_index', username='scj')) # 打印用户路径的 URL,传入用户名 'scj' print(url_for('show_post', post_id=1)) # 打印帖子路径的 URL,传入帖子ID 1 return 'test' # 返回测试字符串 # 设置路由到 '/<username>',其中 <username> 是一个动态部分 @app.route('/<username>') def hello(username): if username == 'handsomescj': return 'Hello {}' .format(username) # 如果用户名是 'handsomescj',则返回欢迎信息 else: return redirect(url_for('index')) # 否则重定向到根路径 # 主程序入口 if __name__ == '__main__': app.run(debug=True) # 运行 Flask 应用,并开启调试模式
新建templates 文件夹
以及在templates 文件中新建user_index.html
<h1>hello,{{ username }}!</h1>
8 get与post请求
get请求
#!/usr/bin/env python3 from flask import Flask from flask import url_for from flask import redirect from flask import render_template #初始化 app =Flask(__name__) #设置多个路由 @app.route('/') def index():return 'Hello World!' @app.route('/a') def add():return '1+1=2' @app.route('/user/<username>') def user_index(username):#在函数中指明变量名称username,就能获取到通过路由传入的变量usernamereturn render_template('user_index.html',username=username) @app.route(' /user/<password>' ) def user_password(password) :print( 'User-Agent :' , request.headers.get ( 'User-Agent ' ))print( 'time: ' , request.args. get( 'time'))print( 'q: ' , request.args. get( 'q'))print ( 'issinge : ' , request.args.get( ' issinge ' ))return ' password is{} '.format(password) @app.route('/post/<int:post_id>') def show_post(post_id):return 'Post {} '.format(post_id) @app.route('/test') def test():print(url_for('index'))print(url_for('user_index',username='scj'))print(url_for('show_post',post_id=1))return 'test' @app.route('/<username>') def hello(username):if username =='handsomescj':return 'Hello {}' .format(username)else:return redirect(url_for('index')) if __name__ == '__main__':app.run(debug=True)
post请求
#!/usr/bin/env python3 from flask import Flask, request, render_template, redirect, url_for # 初始化 app = Flask(__name__) # 设置多个路由 @app.route('/') def index(): return 'Hello World!' @app.route('/a') def add(): return '1+1=2' @app.route('/user/<username>') def user_index(username): # 在函数中指明变量名称username,就能获取到通过路由传入的变量username return render_template('user_index.html', username=username) @app.route('/user/<password>') def user_password(password): print('User-Agent:', request.headers.get('User-Agent')) print('time:', request.args.get('time')) print('q:', request.args.get('q')) print('issinge:', request.args.get('issinge')) return 'password is {}'.format(password) @app.route('/post/<int:post_id>') def show_post(post_id): return 'Post {}'.format(post_id) @app.route('/test') def test(): print(url_for('index')) print(url_for('user_index', username='scj')) print(url_for('show_post', post_id=1)) return 'test' @app.route('/<username>') def hello(username): if username == 'handsomescj': return 'Hello {}'.format(username) else: return redirect(url_for('index')) @app.route('/register', methods=['GET', 'POST']) def register(): print('method:', request.method) print('name:', request.form['name']) print('password:', request.form.get('password')) print('hobbies:', request.form.getlist('hobbies')) print('age:', request.form.get('age', default=18)) return 'register success!' if __name__ == '__main__': app.run(debug=True)
新建client.py
#!/usr/bin/env python3 import requests # 设置需要发送的数据 user_info = { 'name': 'scj', # 去掉键和值之间的空格 'password': '123456', # 去掉键和值之间的空格 'hobbies': ['code', 'run'] # 列表中的字符串去掉空格 } # 向url发送post请求 r = requests.post("http://127.0.0.1:5000/register", data=user_info) print(r.status_code) # 打印请求返回的状态码
9session与cookie
#!/usr/bin/env python3 from flask import Flask from flask import url_for from flask import redirect from flask import render_template from flask import request from flask import session from flask import make_response# 初始化 app = Flask(__name__) app.secret_key='kdjklfjkd87384hjdhjh'# 设置多个路由 @app.route('/') def index(): return 'Hello World!' @app.route('/a') def add(): return '1+1=2' #@app.route('/user/<username>') #def user_index(username): # 在函数中指明变量名称username,就能获取到通过路由传入的变量username #return render_template('user_index.html', username=username) @app.route('/user/<password>') def user_password(password): print('User-Agent:', request.headers.get('User-Agent')) print('time:', request.args.get('time')) print('q:', request.args.get('q')) print('issinge:', request.args.get('issinge')) return 'password is {}'.format(password) @app.route('/post/<int:post_id>') def show_post(post_id): return 'Post {}'.format(post_id) @app.route('/test') def test(): print(url_for('index')) print(url_for('user_index', username='scj')) print(url_for('show_post', post_id=1)) return 'test' @app.route('/<username>') def hello(username): if username == 'handsomescj': return 'Hello {}'.format(username) else: return redirect(url_for('index')) @app.route('/register', methods=['GET', 'POST']) def register(): print('method:', request.method) print('name:', request.form['name']) print('password:', request.form.get('password')) print('hobbies:', request.form.getlist('hobbies')) print('age:', request.form.get('age', default=18)) return 'register success!' @app.route('/set_session') def set_session(): # 设置session的持久化 session.permanent = True session['username'] = 'scj' return '成功设置session' @app.route('/get_session') def get_session(): value = session.get('username') return '成功获取session值为:{}'.format(value)@app.route('/set_cookie/<username>') def set_cookie(username): resp = make_response(render_template('user_index.html', username=username)) resp.set_cookie('user', username) # 使用'user'作为cookie的名字 return resp @app.route('/get_cookie') def get_cookie(): username = request.cookies.get('username') # 使用'user'来检索cookie的值 return 'Hello {}'.format(username) # 修正格式化字符串的语法 if __name__ == '__main__': app.run(debug=True)
10 errot404
#!/usr/bin/env python3 from flask import Flask from flask import url_for from flask import redirect from flask import render_template from flask import request from flask import session from flask import make_response# 初始化 app = Flask(__name__) app.secret_key='kdjklfjkd87384hjdhjh'# 设置多个路由 @app.route('/') def index(): return 'Hello World!' @app.route('/a') def add(): return '1+1=2' @app.route('/user/<username>') def user_index(username): if username == 'invalid'abort(404)return render_template('user_index.html',username=username)@app.route('/user/<password>') def user_password(password): print('User-Agent:', request.headers.get('User-Agent')) print('time:', request.args.get('time')) print('q:', request.args.get('q')) print('issinge:', request.args.get('issinge')) return 'password is {}'.format(password) @app.route('/post/<int:post_id>') def show_post(post_id): return 'Post {}'.format(post_id) @app.route('/test') def test(): print(url_for('index')) print(url_for('user_index', username='scj')) print(url_for('show_post', post_id=1)) return 'test' #@app.route('/<username>') #def hello(username): # if username == 'handsomescj': # return 'Hello {}'.format(username) # else: # return redirect(url_for('index')) @app.route('/register', methods=['GET', 'POST']) def register(): print('method:', request.method) print('name:', request.form['name']) print('password:', request.form.get('password')) print('hobbies:', request.form.getlist('hobbies')) print('age:', request.form.get('age', default=18)) return 'register success!' @app.route('/set_session') def set_session(): # 设置session的持久化 session.permanent = True session['username'] = 'scj' return '成功设置session' @app.route('/get_session') def get_session(): value = session.get('username') return '成功获取session值为:{}'.format(value)@app.route('/set_cookie/<username>') def set_cookie(username): resp = make_response(render_template('user_index.html', username=username)) resp.set_cookie('user', username) # 使用'user'作为cookie的名字 return resp @app.route('/get_cookie') def get_cookie(): username = request.cookies.get('username') # 使用'user'来检索cookie的值 return 'Hello {}'.format(username) # 修正格式化字符串的语法 @app.route(404) def not_found(error):return render_template('404.html'),404if __name__ == '__main__': app.run(debug=True)
404.html
错了,sb
相关文章:

python之flask安装以及使用
1 flask介绍 Flask是一个非常小的Python Web框架,被称为微型框架;只提供了一个稳健的核心,其他功能全部是通过扩展实现的;意思就是我们可以根据项目的需要量身定制,也意味着我们需要学习各种扩展库的使用。 2 python…...

汽车笔记-保险
保险 1.交强险 上路必须买的, 国家规定必须要买。交强险不管你是有责还是无责,它都是可以赔偿的。交强险还有一个18000的垫付功能,比如说我们出了交通事故后,对方住院治疗需要你垫付钱,那么这个时候就可以用到交强险…...

人工智能时代的图像识别:机遇与挑战并存
人工智能(AI)时代为图像识别领域带来了前所未有的机遇,同时也伴随着一系列挑战。这一领域的发展不仅深刻影响了科技、医疗、教育、娱乐等多个行业,还在一定程度上改变了人们的生活方式。 机遇: 技术突破与创新&#…...

工作 9 年后,回老家当计算机老师的真实感受
北京某程序员发帖,他说自己工作了整整 9 年后,今年六月就告别了北京这个大都市,安安心心地回老家当起了计算机老师。 工作日,每天早上 8 点就得按点上班儿,到了下午 4 点半,下班儿的铃声一响,就…...

二叉树的镜像【c++】
#include <iostream> #include <vector> using namespace std;//双链表节点结构 typedef struct treeNode {int value;struct treeNode* left;struct treeNode* right;treeNode(int x) : value(x), left(nullptr), right(nullptr) {} } TreeNode;void mirrorTree(T…...

记录Python的pandas库详解
如何生成一个pd import pandas as pd df pd.DataFrame([[1,2,3],[4,5,6]],index[A,B],columns[C1,C2,C3])df ---------------------------------------------------------------------------C1 C2 C3 A 1 2 3 B 4 5 6df.T -------------------------------------------------…...

阻碍团队使用工具的原因竟然是……
本文首发于个人网站「BY林子」,转载请参考版权声明。 工具化、自动化、数字化,这些都是逐步改善工作的质量和效率的方式,是时代不断进步的表现。然而,还是有很多软件开发团队的工作还处于手工阶段,这是为什么呢&#x…...

【并发】第九篇 Atomic原子操作类 - 字段更新器类详解
导航 简介AtomicIntegerFieldUpdater简介 Atomic的字段更新器类是Java中一种用于实现线程安全的字段更新操作的类。它提供了一组原子操作,可以对字段进行原子性的更新。在并发环境中,多个线程同时更新一个字段可能会出现竞态条件(Race Condition)导致数据不一致的问题。At…...

FFmpeg: 自实现ijkplayer播放器--03UI界面设计
文章目录 UI设计流程图UI设计界面点击播放功能实现 UI设计流程图 UI设计界面 主界面 控制条 播放列表 画面显示 标题栏 设置界面 提示框 点击播放功能实现 槽函数实现: connect(ui->ctrlBarWind, &CtrlBar::SigPlayOrPause, this, &Main…...

【安装部署】Apache SeaTunnel 和 Web快速安装详解
版本说明 由于作者目前接触当前最新版本为2.3.4 但是官方提供的web版本未1.0.0,不兼容2.3.4,因此这里仍然使用2.3.3版本。 可以自定义兼容处理,官方提供了文档:https://mp.weixin.qq.com/s/Al1VmBoOKu2P02sBOTB6DQ 因为大部分用…...

泰迪智能科技携手洛阳理工学院共建“泰迪·洛阳理工数据智能工作室”
为深化校企合作,实现应用型人才培养目标,4月11日,洛阳理工学院携手广东泰迪智能科技股份有限公司举行“泰迪洛阳理工数据智能工作室”揭牌仪式暨工作室成员动员会在洛阳理工学院举行。洛阳理工学院计算机与信息工程学院院长石念峰、副院长李明…...

jenkins构建微信小程序并展示二维码
测试小程序的过程中,很多都是在回头和前端开发说一句,兄弟帮我打一个测试版本的测试码,开发有时间的情况下还好,就直接协助了,但是很多时候他们只修复了其中几个bug,其他需要修复的bug代码正在编写…...

阿里云大学考试python中级题目及解析-python中级
阿里云大学考试python中级题目及解析 1.WEB开发中,下列选项中能够实现客户端重定向的设置是() A.响应头设置Location状态码200 B.响应头设置Location状态码302 C.响应头设置Accept-Location状态码301 D.响应头设置Accept-Location状态码…...

攻防演练作为红方,怎么绕过Web应用防火墙
在攻防演练中,作为红方尝试绕过Web应用防火墙(WAF)是一项常见且具有挑战性的任务。这要求你对WAF的工作原理有深入的理解,并且能够创造性地应用各种技术来测试WAF的防御限制。以下是一些更专业且可操作的策略,用于尝试…...

AI音乐,8大变现方式——Suno:音乐版的ChatGPT - 第505篇
悟纤之歌 这是利用AI为自己制作的一首歌,如果你也感兴趣,可以花点时间阅读下本篇文章。 导读 随着新一代AI音乐创作工具Suno V3、Stable audio2.0、天工SkyMusic的发布,大家玩自创音乐歌曲,玩的不亦乐乎。而有创业头脑的朋友…...

【C++】模拟list
list的模拟真的很震撼,第一次学习时给我幼小的心灵留下了极大地冲击 接下来我们一起看看list模拟究竟是怎样一回事 目录 节点的封装:list类的实现:私有成员变量:构造函数:push_back && pop_back: 迭代器类的实…...

SAP项目任务一览表
根据SAP Activate项目管理方法论的主要精神,浓缩到一些主要的团队和任务。 主要的团队有: 项目管理(办公室)Project Management(office):项目经理团队,包括项目办公室。负责项目整体运行和监控,项目办公室负责项目的…...

130个学术网站和26个科研工具
我们平时可以见到不少学术资源,但是很多信息里会有一些重叠网站、无效网站,导致我们虽然收藏了很多网址,但是却并不都能用,学妹特地整合了130个学术资源网站和26个科研工具,每一个都是亲自试过有效的,希望能…...

《一键搞定!揭秘微信公众号文章批量下载的终极神器》
大家好!今天我要给大家介绍一个超级好用的小工具,能帮你轻松批量下载微信公众号的文章,还不需要安装任何证书哦!无论你是学生还是普通爱好者,只要你想保存一些精彩的公众号内容,这个工具都能帮到你。 概览 …...

鸿蒙入门02-首次安装和配置
注:还没有安装编辑器( deveco studio )的小伙伴请看鸿蒙入门01-下载和安装-CSDN博客 首次安装配置 编辑器( deveco studio )安装完毕以后需要进入配置界面进行相关配置配置完毕以后才可以正常使用 环境配置…...

软件工程 考研复试常考知识点总结
软件工程 什么是软件工程,这门课讲的什么? 软件工程就是把软件的开发、运行、维护的各个阶段进行系统化和规范化的过程,也就是把工程化的方法运用在软件技术之中,以构建和维护高质量的软件。 进一步,什么是工程化思想…...

Docker+Uwsgi+Nginx部署Django项目保姆式教程
之前,我和大家分享了在docker中使用uwsgi部署django项目的教程。这次,为大家带来的是使用DockerUwsgiNginx部署Django项目。废话不多说,我们开干。 步骤1:使用命令创建一个django项目 我这里python版本使用的是3.9.x 首先&#…...

[openGL] 高级光照-Gamma矫正
目录 一 Gamma是什么? 二 感知光度和物理光度 2.1 与Gamma的关系 2.3 存在问题和弊端? 三 Gamma矫正(逆Gamma) 3.1 Gamma矫正的两种方法 3.2 sRGB空间 3.3 重复校正 3.3.1 在着色器中处理重复校正 3.3.2 在加载纹理时就重复校正 3.3.3 校正前后效果 本章节Qt源码点…...

Prometheus+Grafana监控K8S集群(基于K8S环境部署)
目录 一.环境信息二.部署提前工作三.部署Prometheus监控系统四.部署Node_exporter组件五.部署Kube_state_metrics组件六.部署Grafana可视化平台七.Grafana接入Prometheus数据八.Grafana添加监控模板九.拓展 一.环境信息 1.服务器及k8s版本信息 IP地址主机名称角色版本192.168…...

[opencv]VideoWriter写出fourcc格式
fourcc支持的格式 fourcc全名Four-Character Codes,四字符代码,该编码由四个字符组成 cv2.VideoWriter_fourcc(O,O,O,O) cv2.VideoWriter_fourcc(*OOOO) 通常写法有上述两种形式,O代表一个字符,通常有 支持avi格式的有&#…...

软考中级网络工程师-网络技术
下列命令片段含义是( )。 system-view [HUAWEI] observe-port 1 interface gigabitethernet 0/0/1 [HUAWEI] interface gigabitethernet 0/0/2 [HUAWEI-GigabitEthernet0/0/2] port-mirroring to observe-port 1 inbound A 配置端口镜像 B 配置链路聚合 C 配置逻辑接口 D 配置访…...

cmake基础教程(12)函数和宏用法
参考: https://cmake.org/cmake/help/latest/command/function.html https://cmake.org/cmake/help/latest/command/macro.html#command:macro 文章目录 函数宏在CMake中,宏(macro)和函数(function)命令用于封装重复的任务,这些任务可能分散在你的CMakeLists文件中。一…...

SQLite的PRAGMA 声明(二十三)
返回:SQLite—系列文章目录 上一篇:SQLite从出生到现在(发布历史记录)(二十二) 下一篇:用于 SQLite 的异步 I/O 模块(二十四) PRAGMA 语句是特定于 SQLite 的 SQL 扩…...

Qt 实战(1)Qt 概述
一、Qt概述 1、什么是Qt? Qt(官方发音 [kju:t],音同 cute)是一个跨平台的 C 开发库,主要用来开发图形用户界面(Graphical User Interface,GUI)程序,也可以开发不带界面的…...

【练习】二分查找
1、704 (1)题目描述 (2)代码实现 package com.hh.practice.leetcode.array.demo_02;public class BinarySearch_704 {public int search(int[] nums, int target) {int i 0,j nums.length -1;while (i < j){int mid (ij) &…...