Flask官方文档学习-flask快速入门
环境搭建
- 下载安装Python3:www.python.org
- 终端运行命令:python3 -m venv flask_dev,来创建虚拟环境
- 启用虚拟环境,终端使用命令 source /flask_dev/bin/activate; Windows 使用flask_dev/bin/activate.bat
- 安装Flask:激活虚拟环境后使用pip3 install flask
- 该实例在Pycharm编写并运行
快速建立一个应用
from flask import Flask
# __name__: 在当前模块中,__name__的值等于'__main__'
app = Flask(__name__)
# 路由:用户通过访问该应用所在的服务器IP地址加上route()装饰器括号里的地址访问到对应函数下的返回内容
@app.route('/')
def hello_world():
return 'Hello Flask!'
# 启动这个应用
if __name__ == '__main__':
# run()函数的参数,host设置成0.0.0.0可以使同一局域网的用户访问你,
# debug设置成True为打开调试模式,服务器会在修改应用代码之后自动重启,生产环境不要打开这个哦!
app.run(debug=True, host='0.0.0.0')
路由-动态URL
通过把URL的一部分内容标记为<变量名>
在url中添加变量,用户可直接传入变量值,也可以通过使用<变量类型:变量值>
来指定用户传入值的类型规则
@app.route('/user/<username>')
# 函数参数需要使用与route装饰器中的变量路由名,上面装饰器表示接受的变量名为username
def show_user_profile(username):
# show the user profile for that user
return 'User %s' % username
@app.route('/xpath/<path:file_path>')
def show_file_path(file_path):
return 'File Path is %s' % file_path
可指定的类型/转换器类型:
变量类型 | 接受的值类型 |
---|---|
string | (缺省值) 接受任何不包含斜杠的文本 |
int | 接受正整数 |
float | 接受正浮点数 |
path | 类似 string ,但可以包含斜杠 |
uuid | 接受 UUID 字符串 |
唯一URL/自动重定向
@app.route('/project/') # 当访问这个路由时IP地址/project即可,它会自动重定向到/project/这个地址上去
def show_project():
return 'project1, project2'
@app.route('/about') # 当访问这个路由时,如果写成了/about/ 将得到一个404的错误信息
def show_about():
return '关于我们!'
URL构建
@app.route('/login')
def login():
return 'login'
@app.route('/user_profile/<username>')
def profile(username):
from flask import escape
# escape的用法:https://zhuanlan.zhihu.com/p/33143358
return '{}\'s profile'.format(escape(username))
# url_for()用于构建指定函数的url,第一个参数为函数名,可以有多个关键值参数,每个关键字参数对应URL中的变量,未知变量将添加到url中作为查询参数
with app.test_request_context():
from flask import url_for
print(url_for('login'))
# 在login函数中没有id这个参数,将其添加到url中作为查询参数
print(url_for('login', id='/234'))
print(url_for('profile', username='root'))
# 打印出来的地址可以加上IP直接访问,
HTTP方法
默认情况下,一个路由只回应一个GET请求。可以使用route()装饰器的methods参数来处理不同的HTTP方法
from flask import request
# 如果当前使用了 GET 方法, Flask 会自动添加 HEAD 方法支持,
# 并且同时还会 按照 HTTP RFC 来处理 HEAD 请求。同样, OPTIONS 也会自动实现。
@app.route('/register', methods=['GET', 'POST'])
def register():
if request.method == 'POST':
return '注册结果!'
else:
return '注册页面!'
请求对象
通过使用 method 属性可以操作当前请求方法,通过使用 form 属性处理表单数据(在 POST 或者 PUT 请求 中传输的数据)。以下是使用上述两个属性的例子:
@app.route('/login_user', methods=['POST', 'GET'])
def login_user():
if request.method == 'POST':
user_input_name = request.form['username']
user_input_pass = request.form['password']
print(user_input_name)
print(user_input_pass)
if user_input_name == 'admin' and user_input_pass == '123456':
return '登录成功!'
else:
return '用户名或密码错误!'
# 当 form 属性中不存在这个键时会引发一个 KeyError
文件上传
使用Flask处理文件上传,需要在HTML表单中设置enctype"multipart/form-data"属性;通过请求对象 files 属性来访问上传的文件;用于把上传文件保存到服务器的文件系统中的 save() 方法
@app.route('/upload', methods=['GET', 'POST'])
def upload_file():
# secure_filename 获取到文件在上传前的名称
from werkzeug.utils import secure_filename
if request.method == 'POST':
f = request.files['upload_file']
# 保存的路径地址
f.save('./' + secure_filename(f.filename))
msg = '上传成功!'
else:
msg = '上传失败!'
return msg
重定向和错误
@app.route('/page')
def show_page():
# redirect 重定向到/login路由
from flask import redirect
return redirect(url_for('login'))
@app.route('/404')
def error_page():
# abort() 可以 更早退出请求,并返回错误代码:
from flask import abort
abort(404)
JSON格式的API
如果从视图返回一个dict,那么它会被转换成一个JSON响应
@app.route('/me')
def me_api():
return {
'type': 'json',
'api': '/me',
'msg': 200
}
@app.route('/list')
def user_list():
# 使用jsonfiy序列化
from flask import jsonify
"""
Example usage::
from flask import jsonify
@app.route('/_get_current_user')
def get_current_user():
return jsonify(username=g.user.username,
email=g.user.email,
id=g.user.id)
This will send a JSON response like this to the browser::
{
"username": "admin",
"email": "admin@localhost",
"id": 42
}
"""
return jsonify('root', 'admin')
会话
import os
from flask import session, escape, redirect
# os.urandom(16) 随机生成16个字节的串,一个字节是8位
# 使用secret_key 来设置密钥
app.secret_key = os.urandom(16)
@app.route('/index')
def index():
if 'username' in session:
return '你已经登录 %s ' % escape(session['username'])
return '你需要登录!'
@app.route('/login_1', methods=['GET', 'POST'])
def login_1():
if request.method == 'POST':
iun = request.form['username']
ipd = request.form['password']
if iun == 'root' and ipd == '123456':
session['username'] = iun
print(session)
return redirect(url_for('index'))
return '''
<form method="post">
<p><input type=text name=username>
<p><input type=password name=password>
<p><input type=submit value=Login>
<form method="post">
'''
@app.route('/logout')
def logout():
# 删除seesion字典中username这个键的值
session.pop('username', None)
return redirect(url_for('index'))
日志
app.logger.debug('A value for debugging')
app.logger.warning('A warning occurred (%d apples)', 42)
app.logger.error('An error occurred')
文末
本文代码出处基本全来自与Flask官方中文文档:https://dormousehole.readthedocs.io/en/latest/
其中‘静态文件’,‘渲染模版’,‘本地环境测试’,‘Cookies’,‘关于响应’,‘消息闪现’并未记录可移步官方文档查看
Flask官方文档学习-flask快速入门的更多相关文章
- React官方文档笔记之快速入门
快速开始 JSFiddle 我们建议在 React 中使用 CommonJS 模块系统,比如 browserify 或 webpack. 要用 webpack 安装 React DOM 和构建你的包: ...
- Spring Boot 官方文档学习(一)入门及使用
个人说明:本文内容都是从为知笔记上复制过来的,样式难免走样,以后再修改吧.另外,本文可以看作官方文档的选择性的翻译(大部分),以及个人使用经验及问题. 其他说明:如果对Spring Boot没有概念, ...
- Spring boot官方文档学习(一)
个人说明:本文内容都是从为知笔记上复制过来的,样式难免走样,以后再修改吧.另外,本文可以看作官方文档的选择性的翻译(大部分),以及个人使用经验及问题. 其他说明:如果对Spring Boot没有概念, ...
- Spring 4 官方文档学习(十二)View技术
关键词:view technology.template.template engine.markup.内容较多,按需查用即可. 介绍 Thymeleaf Groovy Markup Template ...
- Spring 4 官方文档学习(十一)Web MVC 框架之配置Spring MVC
内容列表: 启用MVC Java config 或 MVC XML namespace 修改已提供的配置 类型转换和格式化 校验 拦截器 内容协商 View Controllers View Reso ...
- Spring Data Commons 官方文档学习
Spring Data Commons 官方文档学习 -by LarryZeal Version 1.12.6.Release, 2017-07-27 为知笔记版本在这里,带格式. Table o ...
- Spring 4 官方文档学习(十一)Web MVC 框架之resolving views 解析视图
接前面的Spring 4 官方文档学习(十一)Web MVC 框架,那篇太长,故另起一篇. 针对web应用的所有的MVC框架,都会提供一种呈现views的方式.Spring提供了view resolv ...
- Spring 4 官方文档学习(十一)Web MVC 框架
介绍Spring Web MVC 框架 Spring Web MVC的特性 其他MVC实现的可插拔性 DispatcherServlet 在WebApplicationContext中的特殊的bean ...
- Spring Framework 官方文档学习(四)之Validation、Data Binding、Type Conversion(一)
题外话:本篇是对之前那篇的重排版.并拆分成两篇,免得没了看的兴趣. 前言 在Spring Framework官方文档中,这三者是放到一起讲的,但没有解释为什么放到一起.大概是默认了读者都是有相关经验的 ...
随机推荐
- day71 django收尾
目录 一.Auth模块 1 简介 2 方法总结 3 如何扩展auth_user表 二.bbs表介绍 1 项目开发流程 2 bbs七张表关系 一.Auth模块 1 简介 在我们创建好一个django项目 ...
- Hadoop集群之浅析安全模式
集群启动顺序: NameNode启动 NameNode启动时,首先将镜像文件(Fsimage)载入内存,并执行编辑日志(Edits)中的各项操作.一旦在内存中成功建立文件系统元数据的映像,则创建一个新 ...
- 数据可视化之powerBI技巧(二)Power BI性能分析器,原来还有这个功能
性能分析器是Power BI前几个月推出的功能,主要用于检测视觉对象和DAX的性能如何,该功能的使用比较简单,首先勾选这个功能, 然后点击开始记录并刷新视觉对象,就可以看出每个元素耗费的时间,如下图 ...
- 数据可视化之powerBI技巧(四)使用Power BI制作帕累托图
各种复杂现象的背后,其实都是受关键的少数因素和普通的大多数因素所影响,把主要精力放在关键的少数因素上,就能达到事半功倍的效果. 这就是大家常说的二八原则,也称为帕累托原则,最早是由意大利经济学家 V. ...
- 爬虫05 /js加密/js逆向、常用抓包工具、移动端数据爬取
爬虫05 /js加密/js逆向.常用抓包工具.移动端数据爬取 目录 爬虫05 /js加密/js逆向.常用抓包工具.移动端数据爬取 1. js加密.js逆向:案例1 2. js加密.js逆向:案例2 3 ...
- jpa随手笔记
jpa注解1.设置Pojo为实体@Entity //标识这个pojo是一个jpa实体 2.设置表名@Table(name = "users") //指定表名为users 3.设置主 ...
- (数据科学学习手札90)Python+Kepler.gl轻松制作时间轮播图
本文示例代码及数据已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 Kepler.gl作为一款强大的开源地理信 ...
- Python Ethical Hacking - BACKDOORS(3)
BACKDOORS Sockets Problem: TCP is stream-based. Difficult to identify the end of message/batch. Solu ...
- Python 如何生成 200 个激活码
请用 Python 如何生成 200 个激活码. 激活码的格式为asqE-9xRK-lqWU-QkMT 要求1: 使用随机生成时,生成数字概率为1/5,大写字母和小写字母概率各为2/5 要求2: 这2 ...
- STL Stack(栈)学习笔记 + 洛谷 P1449 后缀表达式
稍微看了看刘汝佳的白皮书,“实用主义”的STL实在是香到我了,而且在实验室大佬的推荐下我开始了stl的学习. 每篇附带一个题目方便理解,那行,直接开始. 毕竟是实用主义,所以就按照给的题目的例子来理解 ...