
Flask是一种使用python编写的轻量级的web微框架,它可以很好地结合MVC模式进行开发,具有很强的兼容性和扩展性,用户可以根据自己的需求来添加相应的功能,其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 。Werkzeug库十分强大,功能比较完善,支持URL路由请求集成,一次可以响应多个用户的访问请求;支持Cookie和会话管理,通过身份缓存数据建立长久连接关系,并提高用户访问速度;支持交互式Javascript调试,提高用户体验;可以处理HTTP基本事务,快速响应客户端推送过来的访问请求。Jinja2库支持自动HTML转移功能,能够很好控制外部黑客的脚本攻击。
Flask的基本模式为在程序里将一个视图函数分配给一个URL,每当用户访问这个URL时,系统就会执行给该URL分配好的视图函数,获取函数的返回值并将其显示到浏览器上(百度摘录):
flask参考教程:
https://www.w3cschool.cn/flask/
https://dormousehole.readthedocs.io/en/latest
注:创建独立项目虚拟机的目的是为了防止因其它项目毁坏环境,导致该项目无法运行的情况。以下是一些虚拟机常用命令
pip install virtualenv
创建虚拟环境
mkvirtualenv 环境名
切换虚拟环境
workon 环境名
列出虚拟环境
lsvirtualenv
删除虚拟环境
rmvirtualenv
安装Flask
注:高于1.1.2版本的flask可能会出现不兼容的情况
pip install flask == 1.1.2
安装Flask时,会自动安装以下依赖:
| 依赖 | |
|---|---|
| Werkzeug | 用于实现 WSGI ,应用和服务之间的标准 Python 接口 |
| Jinja | 用于渲染页面的模板语言 |
| MarkupSafe | 与 Jinja 共用,在渲染页面时用于避免不可信的输入,防止注入攻击 |
| ItsDangerous | 保证数据完整性的安全标志数据,用于保护 Flask 的 session cookie |
| Click | 是一个命令行应用的框架。用于提供 flask 命令,并允许添加自定义 管理命令 |
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w2dwYknG-1651652343727)(assets/Flask框架初学/image-20220429194633046.png)]
static一般用来存放一些静态文件,如css、images、js等
templates用来存放模板,即html前端界面
app.py是整个程序运行的入口
一个简单的flask应用可以通过一个简单的example,进入到flask的世界
settings.py 配置文件,可配置不同环境的不同变量
# 配置文件
ENV = 'development'
DEBUG = True
index.html
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<body>
<p><a href="" name="注册" >注册a>p>
<p><a href="" name="登录" >登录a>p>
<p><a href="" name="展示" >展示a>p>
body>
html>
register2.html
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<body>
<h1>欢迎来到我的学习乐园h1>
<div>
<form action="/register2" method="post">
<p><input type="text" name="username" placeholder="请输入用户名">p>
<p><input type="text" name="password" placeholder="请设置密码">p>
<p>p>
<p><input type="submit" value="注册">p>
form>
div>
body>
html>
app.py
import json
from flask import Flask, Response, request, render_template, url_for
from werkzeug.utils import redirect
import settings
# 创建一个Flask实例
app = Flask(__name__)
# 导入外部文件,这里导入settings配置
app.config.from_object(settings)
'''
print(app.config)
返回一个字典:
'''
data = {'a':'北京','b':'上海','c':'深圳'}
users = []
# 修改环境 环境有:production development testing
# app.config['ENV'] = 'development'
# 修改debug的状态
# app.config['DEBUG'] = True
# 默认ip为 127.0.0.1:5000 这里的'/'指的是http://127.0.0.1:5000/ endpoint 为路径命名
@app.route('/',endpoint='index')
def hello_word():
return render_template('index.html')
@app.route('/register')
def register():
# 默认从templates文件夹里查询.html文件
# r = render_template('register.html')
r = render_template('register2.html')
print(r)
return r
@app.route('/come', methods=['GET','POST'])
def come():
print(request.full_path)
print(request.path)
# 只能取到GET请求的传参
print(request.args)
# print(request.args.get('username'))
# print(request.args.get('address'))
# 可以取到POST请求的传参
print(request.form)
print(request.form.get('username'))
print(request.form.get('address'))
return "进来了"
@app.route('/register2',methods=['GET','POST'])
def register2():
username = request.form.get('username')
password = request.form.get('password')
repassword = request.form.get('repassword')
if password == repassword and username != '':
user = {'username':username,'password':password}
users.append(user)
# 重定向到名为index的路径'/'
return redirect(url_for('index'))
# return 'register success !'
return render_template('register2.html')
@app.route('/show')
def show():
json_str = json.dumps(users)
return json_str
@app.route('/test')
def test():
url = url_for('index')
print(url)
# 绑定路由规则
# app.add_url_rule('/index',view_func=index)
if __name__ == '__main__':
# 路由规则表
# print(app.url_map)
# host改成0.0.0.0,同一局域网下的其他主机可进行访问
# debug默认为off,即false,代码发生改变不会自动加载 适用于production环境;debug=True,只要代码发生改变,服务器会重新加载最新代码 适用于开发环境 development
# run(host='0.0.0.0',port='',debug='True')
# app.run(port=8008)
app.run()
访问结果:
知识点:
知识点1:
设置配置文件settings,环境:production development testing
ENV = 'development'
DEBUG = True
导入外部文件,这里导入settings配置
import setting
1、app.config.from_object(settings)
2、app.config.from_pyfile('settings')
引用配置文件settings:
print(app.config) ---->字典
app.config['ENV'] = 'development'
app.config['DEBUG'] = True
知识点2:
app.run(host='0.0.0.0',port=5001,debug=True)
debug:布尔型
debug = True 开启了debug调试模式 只要改变服务器代码会重新加载最新的代码 适用于开发环境development
debug = False 默认 代码发生改变不会自动加载 适用于production环境
知识点3:
路由(下一章详解):
# 默认ip为 127.0.0.1:5000 这里的'/'指的是http://127.0.0.1:5000/ endpoint 为路径命名
@app.route('/',endpoint='index')
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)