###1 手工创建flask 虚拟环境
https://www.osgeo.cn/flask/installation.html
创建一个虚拟环境
创建一个项目文件夹,并在内部创建一个 venv 文件夹:
$ mkdir myproject
$ cd myproject
$ python3 -m venv venv
激活虚拟环境
在处理项目之前,请激活相应的虚拟环境:
激活后,你的shell提示将更改显示为激活环境的名称。
安装Flask
在激活的环境中,使用以下命令安装Flask: (这一步如果报错,可以通过2的阿里云镜像进行安装)
现在安装Flask。快速查看快速启动或者文档概述
###2 Python3.6.6中如何安装Flask
https://baijiahao.baidu.com/s?id=1718742017356923107&wfr=spider&for=pc
Python3.6.6中如何安装Flask播报文章
南大盛联
2021-12-10 15:08
南大盛联官方帐号
关注
我们在Python中使用flask这个模块的时候,首先面临的就是安装。之前Python中的很多模块,安装都是非常容易的,只要pip3 install model_name;但这个模块安装的时候出现了一些问题。特来分享下
在windows/system32系统资料夹中选中cmd.exe后右键鼠标,“以管理员身份”运行文件。
升级pip版本。
即使你做了第一步,执行下面这些命令,照样收到系统发送的“拒绝访问。”
C:\WINDOWS\system32>pip install flask
拒绝访问。
C:\WINDOWS\system32>pip install --upgrade pip
拒绝访问。
C:\WINDOWS\system32>
直到我们这样执行python -m pip install -U pip
C:\WINDOWS\system32>python -m pip install -U pip
Requirement already satisfied: pip in c:\python36\lib\site-packages (20.3)
Collecting pip
Downloading pip-21.3.1-py3-none-any.whl (1.7 MB)
|████████████████████████████████| 1.7 MB 656 kB/s
Installing collected packages: pip
Attempting uninstall: pip
Found existing installation: pip 20.3
Uninstalling pip-20.3:
Successfully uninstalled pip-20.3
Successfully installed pip-21.3.1
3.修改Windows防火墙中的【入站规则】,在高级选项中去掉所有的【公用】选项。
当做了上面这步,再进cmd,就不会出现【拒绝访问。】
4.0安装flask
一般安装pip3 install Flask
如果出现红色的这些,就是代表没有安装成功。
使用终极绝杀:
pip install flask -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
全部搞定。
4.测试
版本查看:
C:\Users\Administrator>flask --version
Python 3.6.6
Flask 2.0.2
Werkzeug 2.0.2
cmd
import flask
##3 按照文档,
https://www.jianshu.com/p/0b909759ccb3
开始运行一个flask 网站
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():#定义一个hell
return "这是Goodwin的第一个Flask测试程序!"
if __name__ == "__main__":
app.run()
####4
1. 前端表单数据传到后端
在前端HTML页面中,使用form表单来收集用户输入的数据。例如:
HTML 存放目录方法:main.py 文件目录下,新建一个templates 目录,并且html文件放在该目录下
```index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>index</title>
<form action="/execute_code" method="POST">
<div class="form-group">
<label for="input">输入:</label>
<textarea class="form-control" id="input" name="input" rows="3"> 你好</textarea>
<button type="submit" class="btn btn-primary">执行</button>
</div>
</form>
</head>
<body>
</body>
</html>
```
```result.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
我的模板html内容
<br />{{ my_str }}
<br />{{ my_int }}
<br />{{ my_array }}
<br />{{ my_dict }}
</head>
<body>
</body>
</html>
```
参考
```html
action=" url_for('execute_code') }}" method="POST" <div class="form-group" <label for="input"输入:</label>
<textarea class="form-control" id="input" name="input" rows="3"textarea>
</div>
<button type="submit" class="btn btn-primary"执行</button>
</form>
```
这里使用了Flask模板语言,`url_for('execute_code')`会生成一个对应后端路由的URL,`method="POST"表示使用POST请求提交表单数据。
在后端Python代码中,需要定义对应的路由和处理函数来接收表单提交的数据。例如:
```python
from flask import Flask, request, render_template
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/execute_code', methods=['POST'])
def execute_code():
input_data = request.form.get('input')
# 执行代码...
return '执行结果'
if __name__ == '__main__':
app.run()
```
这里定义了两个路由,`/`用于显示前端页面,`/execute_code`用于接收表单数据并执行代码,`request.form.get('input')`可以获取前端页面传来的数据。
2. 执行结果反馈到页面
在后端Python代码中,执行完代码后需要将结果反馈到前端页面上。可以使用Flask模板语言中的变量来动态生成页面。
例如,在`execute_code`函数中,可以将执行结果存储到一个变量中,然后将变量传递给模板引擎,最后在HTML页面中使用`{{ result }}`的方式来显示结果。
```main.py python
from flask import Flask, request, render_template
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/execute_code', methods=['POST'])
def execute_code():
input_data = request.form.get('input')
# 执行代码...
result = '执行结果'
return render_template('result.html',my_str=result,my_int=input_data)
if __name__ == '__main__':
app.run(debug=True)
更多详细信息,请参考(https://blog.csdn.net/m0_46814663/article/details/123667122)
(https://www.jb51.net/article/144199.htm)
#####Python虚拟环境从一个Windows计算机复制到另一个Windows计算机 脱机
将Python虚拟环境从一个Windows计算机复制到另一个Windows计算机,可以按照以下步骤操作:
在源计算机上导出虚拟环境的列表:
pip freeze > requirements.txt
复制整个虚拟环境文件夹(通常在项目根目录中的venv文件夹Lib\site-packages)到目标计算机上。
在目标计算机上创建新的虚拟环境,并激活它。
在目标计算机上安装导出的依赖项:
pip install -r requirements.txt
这样就可以离线复制Python虚拟环境并在另一台Windows计算机上使用它了。
或者(https://blog.csdn.net/inthat/article/details/117026589)
pip install --use-wheel --no-index --find-links=wheelhouse -r requirements.txt
######sample 3
https://www.cnblogs.com/clnchanpin/p/6920103.html
http://hk.noobyard.com/article/p-uthemppi-oe.html
第44天:Flask 框架集成Bootstrap
ootstrap 是 Twitter 公司的設計師 Mark Otto 和 Jacob Thornton 開發的 Web 項目開發框架,簡潔、直觀、強悍,使得 Web 開發更加快捷,一經推出後頗受歡迎,一直是 GitHub 上的熱門開源項目,這麼好的開發框架 Flask 必定少不了。html
期初在 Flask 的擴展包中有 flask-bootstrap, 不事後來更新不多,後來 greyli 基於 flask-bootstrap 開發了 bootstrap-flask 擴展模塊,不經支持最新的 Bootstrap4, 還基於 Jinjia2 模板引擎的宏,作了更多的擴展。值得一提的是 greyli 是個中國帥小夥,能在文章後面的參考連接中找到他。python
安裝
使用 pip 安裝:jquery
pip install bootstrap-flask
若是以前安裝過 flask-bootstrap
, 須要將其卸載掉,否則二者會有衝突,若是您遇到錯誤提示: jinja2.exceptions.UndefinedError: 'bootstrap' is undefined
,很大可能就是這個問題g
######sample 5
在 Flask 框架中,您可以通过在 HTML 模板中导入本地 CSS 文件来调用 Bootstrap。您可以将 Bootstrap 的 CSS 文件下载到您的本地文件夹,并通过以下方式将其链接到您的 HTML 页面中:
在您的 Flask 应用程序中创建一个名为 “static” 的目录。可以使用以下命令:
app = Flask(__name__, static_url_path='/static')
这个名为 “static” 的目录将存储您的 CSS 文件、JavaScript 文件和图像文件等。
在您的 “static” 目录中创建一个名为 “css” 的目录。
将 Bootstrap 的 CSS 文件下载到 “css” 目录中。
在您的 HTML 模板中,通过以下方式将 Bootstrap 的 CSS 文件链接到您的页面中:
<link rel="stylesheet" href="{{ url_for('static', filename='css/bootstrap.min.css') }}">
这条代码将连接到您在 “static/css” 目录中下载的 Bootstrap CSS 文件。
希望这可以帮助您在 Flask 应用程序中调用本地的 Bootstrap CSS 文件。
###sample 6
使用jquer和ajax和python将数据库查询结果显示在当前网页弹出窗口
首先,您需要创建一个包含查询表单和结果显示区域的HTML页面。在查询表单中,您可以使用jQuery和Ajax将用户输入发送到Python后端,然后在结果显示区域中显示结果。
以下是一个基本的示例代码:
HTML 页面:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>查询结果</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script>
$(document).ready(function() {
$('form').submit(function(event) {
event.preventDefault();
$.ajax({
type: 'POST',
url: '/query',
data: $('form').serialize(),
success: function(response) {
$('#result').html(response);
$('#myModal').modal('show');
},
error: function(error) {
console.log(error);
}
});
});
});
</script>
</head>
<body>
<form>
<label for="query">查询条件:</label>
<input type="text" id="query" name="query">
<input type="submit" value="查询">
</form>
<!-- Modal -->
<div id="myModal" class="modal">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">查询结果</h4>
<button type="button" class="close" data-dismiss="modal">×</button>
</div>
<div class="modal-body">
<div id="result"></div>
</div>
</div>
</div>
</div>
</body>
</html>
在这个HTML页面中,我们使用jQuery和Ajax来捕获查询表单的提交事件。我们将表单数据序列化为一个字符串并将其发送到Python后端的URL /query。一旦我们得到了结果,我们将结果插入到结果显示区域中,并使用Bootstrap中的Modal组件在当前页面弹出窗口中显示结果。
Python 后端:
from flask import Flask, request, jsonify, render_template
import sqlite3
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/query', methods=['POST'])
def query():
query = request.form['query']
conn = sqlite3.connect('example.db')
c = conn.cursor()
c.execute(f"SELECT * FROM table_name WHERE column_name='{query}'")
results = c.fetchall()
conn.close()
return jsonify(results)
if __name__ == '__main__':
app.run(debug=True)
在这个Python后端中,我们使用Flask框架来创建一个服务器并处理HTTP请求。在/query路由中,我们从请求的表单数据中获取查询条件,并使用sqlite3库来查询数据库。查询的结果是一个元组的列表,我们使用jsonify将其转换为JSON格式并返回给前端。
请注意,这只是一个简单的示例,您需要根据您的具体情况进行适当的修改和调整。
##离线 升级pip
(venv) C:\Python37_64\magic_box>pip -V
pip 23.1.1 from c:\python37_64\magic_box\venv\lib\site-packages\pip (python 3.7)
C:\\venv\Scripts\python.exe -m pip install pip-23.1.1-py3-none-any.whl --force-reinstall
###sample 3
for循环中可以使用特殊的变量
loop.index当前循环迭代的次数(从 1 开始)
loop.index0当前循环迭代的次数(从 0 开始)
loop.revindex到循环结束需要迭代的次数(从 1 开始)
loop.revindex0到循环结束需要迭代的次数(从 0 开始)
loop.first如果是第一次迭代,为 True 。
loop.last如果是最后一次迭代,为 True 。
loop.length序列中的项目数。
loop.cycle在一串序列间期取值的辅助函数。见下面示例程序。
候我们不仅仅只是需要输出变量的值,我们还需要修改变量的显示,甚至格式化、运算等等,
而在模板中是不能直接调用 Python 中的某些方法,那么这就用到了过滤器。
过滤器的使用方式为:变量名 | 过滤器
{{variable | filter_name(*args)}}
如果没有任何参数传给过滤器,则可以把括号省略掉
{{variable | filter_name }}
在 jinja2 中,过滤器是可以支持链式调用的,示例如下:
{{ "hello world" | reverse | upper }}
4.1字符串操作
safe:禁用转义
<p>{{ '<em>hello</em>' | safe }}</p>
capitalize:把变量值的首字母转成大写,其余字母转小写
<p>{{ 'hello' | capitalize }}</p>
lower:把值转成小写
<p>{{ 'HELLO' | lower }}</p>
upper:把值转成大写
<p>{{ 'hello' | upper }}</p>
title:把值中的每个单词的首字母都转成大写
<p>{{ 'hello' | title }}</p>
reverse:字符串反转
<p>{{ 'olleh' | reverse }}</p>
format:格式化输出
<p>{{ '%s is %d' | format('name',17) }}</p>
striptags:渲染之前把值中所有的HTML标签都删掉
<p>{{ '<em>hello</em>' | striptags }}</p>
truncate: 字符串截断
<p>{{ 'hello every one' | truncate(9)}}</p>
4.2 列表操作
first:取第一个元素
<p>{{ [1,2,3,4,5,6] | first }}</p>
last:取最后一个元素
<p>{{ [1,2,3,4,5,6] | last }}</p>
length:获取列表长度
<p>{{ [1,2,3,4,5,6] | length }}</p>
sum:列表求和
<p>{{ [1,2,3,4,5,6] | sum }}</p>
sort:列表排序
<p>{{ [6,2,3,1,5,4] | sort }}</p>
4.3 自定义过滤器
过滤器的本质是函数。当模板内置的过滤器不能满足需求,可以自定义过滤器。自定义过滤器有两种实现方式:
- 一种是通过Flask应用对象的 **add_template_filter** 方法
- 通过装饰器来实现自定义过滤器
**重要:自定义的过滤器名称如果和内置的过滤器重名,会覆盖内置的过滤器。**
添加列表反转的过滤器:方法一
通过调用应用程序实例的 add_template_filter 方法实现自定义过滤器。该方法第一个参数是函数名,第二个参数是自定义的过滤器名称:
def do_listreverse(li):
# 通过原列表创建一个新列表
temp_li = list(li)
# 将新列表进行返转
temp_li.reverse()
return temp_li
app.add_template_filter(do_listreverse,'lireverse')
方法二:
用装饰器来实现自定义过滤器。装饰器传入的参数是自定义的过滤器名称。
@app.template_filter('lireverse')
def do_listreverse(li):
# 通过原列表创建一个新列表
temp_li = list(li)
# 将新列表进行返转
temp_li.reverse()
return temp_li
5,模板继承
和django中使用方法一样,用extends
{% extends 'base.html' %}
{% block content %}
需要填充的内容
{% endblock content %}
六、Flask中加CSRF
设置应用程序的 secret_key,用于加密生成的 csrf_token 的值
app.secret_key = "#此处可以写随机字符串#"
导入 flask_wtf.csrf 中的 CSRFProtect 类,进行初始化,并在初始化的时候关联 app
from flask.ext.wtf import CSRFProtect
CSRFProtect(app)
在表单中使用 CSRF 令牌:
<form method="post" action="/">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
</form>
转载于:https://www.cnblogs.com/12345huangchun/p/10673940.html
炊烟起了;夕阳下了;细雨来了
多调试,交互式编程体验
记录,独立思考,对比
感谢转载作者
修车
国产化
read and connect
匍匐前进,
讲故事