一、Flask简介
? 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 命令,并允许添加自定义 管理命令 |
三、项目启动
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>Title</title>
</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>Title</title>
</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><input type="text" name="repassword" placeholder="请再次确认密码" </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
app = Flask(__name__)
app.config.from_object(settings)
'''
print(app.config)
返回一个字典:
<Config {'DEBUG': True, 'TESTING': False, 'PROPAGATE_EXCEPTIONS': None, 'PRESERVE_CONTEXT_ON_EXCEPTION': None, 'SECRET_KEY': None, 'PERMANENT_SESSION_LIFETIME': datetime.timedelta(days=31), 'USE_X_SENDFILE': False, 'LOGGER_NAME': '__main__', 'LOGGER_HANDLER_POLICY': 'always', 'SERVER_NAME': None, 'APPLICATION_ROOT': None, 'SESSION_COOKIE_NAME': 'session', 'SESSION_COOKIE_DOMAIN': None, 'SESSION_COOKIE_PATH': None, 'SESSION_COOKIE_HTTPONLY': True, 'SESSION_COOKIE_SECURE': False, 'SESSION_REFRESH_EACH_REQUEST': True, 'MAX_CONTENT_LENGTH': None, 'SEND_FILE_MAX_AGE_DEFAULT': datetime.timedelta(seconds=43200), 'TRAP_BAD_REQUEST_ERRORS': False, 'TRAP_HTTP_EXCEPTIONS': False, 'EXPLAIN_TEMPLATE_LOADING': False, 'PREFERRED_URL_SCHEME': 'http', 'JSON_AS_ASCII': True, 'JSON_SORT_KEYS': True, 'JSONIFY_PRETTYPRINT_REGULAR': True, 'JSONIFY_MIMETYPE': 'application/json', 'TEMPLATES_AUTO_RELOAD': None, 'ENV': 'development'}>
'''
data = {'a':'北京','b':'上海','c':'深圳'}
users = []
@app.route('/',endpoint='index')
def hello_word():
return render_template('index.html')
@app.route('/register')
def register():
r = render_template('register2.html')
print(r)
return r
@app.route('/come', methods=['GET','POST'])
def come():
print(request.full_path)
print(request.path)
print(request.args)
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)
return redirect(url_for('index'))
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)
if __name__ == '__main__':
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')
|