python之flask安装以及使用

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,就能获取到通过路由传入的变量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'))
​
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'),404
    
  
if __name__ == '__main__':  
    app.run(debug=True)

404.html

错了,sb

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何在PPT中获得网页般的互动效果

如何在PPT中获得网页般的互动效果 效果可以看视频 PPT中插入网页有互动效果 当然了&#xff0c;获得网页般的互动效果&#xff0c;最简单的方法就是在 PPT 中插入网页呀。 那么如何插入呢&#xff1f; 接下来为你讲解如何获得&#xff08;此方法在 PowerPoint中行得通&#…

吴恩达llama课程笔记:第七课llama安全工具

羊驼Llama是当前最流行的开源大模型&#xff0c;其卓越的性能和广泛的应用领域使其成为业界瞩目的焦点。作为一款由Meta AI发布的开放且高效的大型基础语言模型&#xff0c;Llama拥有7B、13B和70B&#xff08;700亿&#xff09;三种版本&#xff0c;满足不同场景和需求。 吴恩…

ASP.NET MVC中Filter过滤器的使用

MVC Filter是典型的AOP&#xff08;面向切面编程&#xff09;应用&#xff0c;在ASP.NET MVC中的4个过滤器类型&#xff0c;如下&#xff1a; 但是默认实现它们的过滤器只有三种&#xff0c;分别是ActionFilter&#xff08;方法&#xff09;&#xff0c;Authorize&#xff08;授…

微服务之网关路由

一、概述 1.1认识网关 什么是网关&#xff1f; 顾明思议&#xff0c;网关就是网络的关口。数据在网络间传输&#xff0c;从一个网络传输到另一网络时就需要经过网关来做数据的路由和转发以及数据安全的校验。 更通俗的来讲&#xff0c;网关就像是以前园区传达室的大爷。 外…

Pytest精通指南(14)Parametrize之indirect(间接参数)

文章目录 官方概念概念分析官方示例示例分析验证indirect为True但不指定fixture验证indirect为True但不存在fixture 官方概念 概念分析 在pytest的pytest.mark.parametrize装饰器中&#xff0c;indirect参数用于指示是否应该从fixtures中解析参数值&#xff0c;而不是直接使用提…

OpenCV基本图像处理操作(五)——图像数据操作

数据读取 cv2.IMREAD_COLOR&#xff1a;彩色图像cv2.IMREAD_GRAYSCALE&#xff1a;灰度图像 import cv2 #opencv读取的格式是BGR import matplotlib.pyplot as plt import numpy as np %matplotlib inline imgcv2.imread(cat.jpg)数据显示 #图像的显示,也可以创建多个窗口 c…

视频汇聚/安防视频监控云平台EasyCVR云端录像播放与下载的接口调用方法

视频汇聚/安防视频监控云平台EasyCVR支持多协议接入、可分发多格式的视频流&#xff0c;平台支持高清视频的接入、管理、共享&#xff0c;支持7*24小时不间断监控。视频监控管理平台EasyCVR可提供实时远程视频监控、录像、回放与存储、告警、语音对讲、云台控制、平台级联、磁盘…

Flink学习(六)-容错处理

前言 Flink 是通过状态快照实现容错处理 一、State Backends 由 Flink 管理的 keyed state 是一种分片的键/值存储&#xff0c;每个 keyed state 的工作副本都保存在负责该键的 taskmanager 本地中。 一种基于 RocksDB 内嵌 key/value 存储将其工作状态保存在磁盘上&#x…

图像处理与视觉感知---期末复习重点(8)

文章目录 一、图像分类流程二、梯度方向直方图2.1 概述2.2 计算梯度方向直方图2.2.1 过程2.2.2 总结 三、SIFT 一、图像分类流程 流程&#xff1a;输入图像、预处理、特征提取、学习算法、类标。 二、梯度方向直方图 2.1 概述 1. 梯度方向直方图(Histogram of Oriented Gradie…

RabbitMQ交换机的类型

交换机类型 可以看到&#xff0c;在订阅模型中&#xff0c;多了一个exchange角色&#xff0c;而且过程略有变化&#xff1a; Publisher&#xff1a;生产者&#xff0c;不再发送消息到队列中&#xff0c;而是发给交换机 Exchange&#xff1a;交换机&#xff0c;一方面&#xff…

Backend - DRF 序列化(django-rest-framework)

目录 一、restful 、django-rest-framework 、swagger 三者的关系 &#xff08;一&#xff09;restful API&#xff08;REST API&#xff09; 1. rest 2. restful 3. api 4. restfulAPI &#xff08;二&#xff09;django-rest-framework&#xff08;简称DRF&#xff09…

中立分析腾讯云故障相关的事件

最近腾讯云的故障&#xff0c;让一堆云计算爱好者兴奋地远看指点江山、近看沐猴而冠。我比这群爱好者们更了解云计算&#xff0c;但是我尊重我的读者&#xff0c;你们从我这里看到的科普信息&#xff0c;不仅仅只有情绪价值。 在信息爆炸的时代&#xff0c;大家关注和信任某个媒…

如何使用docker-compose安装数据可视化应用JSON Crack并实现远程访问

文章目录 1. 在Linux上使用Docker安装JSONCrack2. 安装Cpolar内网穿透工具3. 配置JSON Crack界面公网地址4. 远程访问 JSONCrack 界面5. 固定 JSONCrack公网地址 JSON Crack 是一款免费的开源数据可视化应用程序&#xff0c;能够将 JSON、YAML、XML、CSV 等数据格式可视化为交互…

微服务中的重要模块

为什么要有微服务&#xff1f; 微服务提高开发效能&#xff0c;避免业务的重复理解&#xff0c;代码重复开发&#xff0c;增加开发效能和代码复用性。 在实际的工作中许多不同的业务有着共同的功能需求&#xff0c;如果我们每遇到一次这种需求就重新去理解构建一次的话会花费大…

msyql中SQL 错误 [1118] [42000]: Row size too large (> 8126)

场景&#xff1a; CREATE TABLE test-qd.eqtree (INSERT INTO test.eqtree (idocid VARCHAR(50) NULL,sfcode VARCHAR(50) NULL,sfname VARCHAR(50) NULL,sfengname VARCHAR(50) NULL,…… ) ENGINEInnoDB DEFAULT CHARSETutf8 COLLATEutf8_general_ci;或 alter table eqtre…

Ctex+texmaker

最近要准备幻灯片&#xff0c;发现我喜欢的模板是用的Ctex&#xff0c;在Texlive下没有办法运行。 于是进行了很多尝试。最后找到一个快捷的办法&#xff0c;删掉自己笔记本中的texlive&#xff0c;在Ctex官网中下载Ctex套件(下载中心 – CTEX)&#xff0c;下载的版本是过时版…

Linux 安装KVM虚拟机

什么是KVM虚拟机&#xff1f; KVM 是 Kernel-based Virtual Machine 的缩写&#xff0c;是一种用于虚拟化的开源硬件虚拟化技术。它使用 Linux 内核的虚拟化模块&#xff0c;将物理服务器划分为多个虚拟机。KVM 允许虚拟机直接访问物理硬件资源,从而提供出色的性能和稳定性,同…

解读科技智慧公厕改变生活的革命性创新之路

公共厕所&#xff0c;作为城市基础设施的一部分&#xff0c;一直以来都备受人们诟病。脏乱差、设施老旧、管理混乱&#xff0c;成为公共厕所长期存在的问题。然而&#xff0c;随着科技的不断进步&#xff0c;智慧公厕应运而生&#xff0c;为解决公厕难题&#xff0c;智慧公厕源…

BetterDisplay Pro for Mac 显示器校准和优化软件

BetterDisplay Pro for Mac是一款适用于Mac电脑的显示器校准和优化软件。它可以帮助用户校准显示器的颜色、亮度、对比度和伽马值等参数&#xff0c;使得显示器更加准确和清晰&#xff0c;提高用户的工作效率。 BetterDisplay Pro for Mac v2.0.11激活版下载 这款软件具有直观的…

电脑不能上网,宽带调制解调器出现问题如何处理

目录 一、问题说明 二、解决方案 一、问题说明 内网的设备能互联&#xff0c;内网的各个设备无法连外网。 电脑在检测网络时&#xff0c;出现以下提示&#xff1a; 二、解决方案 首先重启光猫&#xff08;我们是电信宽带&#xff09;。 如果还是有问题&#xff0c;再重启…