Flask框架(1)-程序基本结构
1. 安装Flask
1.1 安装虚拟环境
mkdir myproject
cd myproject
py -3 -m venv venv
#Linux系统: python3 -m venv venv
1.2 激活虚拟环境
venv\Scripts\activate
#Linux中: . venv/bin/activate
1.3 安装Flask
(venv) D:\Tmp\myproject>pip install Flask
2. 第一个Flask程序
from flask import Flask app = Flask(__name__) @app.route('/')
def hello():
return 'hello world' if __name__ == '__main__':
app.run()
初始化:app = Flask(__name__)
Flask类只需要有个构造参数即主模块或包的名字,这个参数决定程序的根目录,以便找到相对于根目录的资源文件,这个大部分情况__name__就是所需要的值。
路由:@app.route('/')
处理函数和和URL的关系,Flask通过修饰器把函数注册为路由。访问http://localhost:5000就会调用index这个视图函数
访问:http://127.0.0.1:5000,页面即可得到hello world.
默认只能本机访问,可以修改端口和允许的主机:app.run(host = '0.0.0.0',port = 7777,debug = True )
3.上下文
Flask有程序上下文和请求两种上下文,Flask使用上下文把一些对象设置为在一个线程内全局可访问。
Flask在分发请求之前,激活或者说推送程序和请求上下文,请求处理完后进行删除。注意一定要激活才可以使用上下文。
4. 请求调度
查看URL和处理函数的映射关系:
这里有一个特殊的映射关系/static/<filename>,这是Flask添加的特殊路由,用于访问静态文件。url_for('static', username='js/test.js')
from flask import Flask, url_for app = Flask(__name__) @app.route('/')
def index():
return 'index' @app.route('/login')
def login():
return 'login' @app.route('/user/<username>')
def profile(username):
return '{}\'s profile'.format(username) with app.test_request_context():
print(url_for('index'))
print(url_for('login'))
print(url_for('login', next='/'))
print(url_for('profile', username='John Doe')) /
/login
/login?next=/
/user/John%20Doe
5. 请求钩子
钩子用于处理请求之前或者之后,比如说请求开始前建立数据库连接,Flask支持下面四种钩子:
6. 响应
6.1 响应状态码
@app.route('/')
def index():
return '<h1>Hello World!</h1>',400
6.2 返回respones对象
@app.route('/')
def index():
response = app.make_response('<h1>This document carries a cookie</h1>')
response.set_cookie('name', 'scott')
return response
6.3 重定向
from flask import redirect
app = Flask(__name__) @app.route('/')
def red():
return redirect('https://www.baidu.com')
6.4 abort函数处理错误
@app.route('/login')
def login():
abort(401)
this_is_never_executed()
7. 渲染模板
从Python内部生成HTML并不好玩,而且实际上非常麻烦,因为您必须自行执行HTML转义以保持应用程序的安全。因为Flask 自动为你配置Jinja2模板引擎。
要呈现模板,您可以使用该render_template()
方法。您所要做的就是提供模板的名称以及想要作为关键字参数传递给模板引擎的变量。以下是如何呈现模板的简单示例:
from flask import render_template @app.route('/hello/')
@app.route('/hello/<name>')
def hello(name=None):
return render_template('hello.html', name=name)
8. HTTP方法
根据不同的请求方法,执行不同的方法。
from flask import request @app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
return do_the_login()
else:
return show_the_login_form()
9. request
@app.route('/login', methods=['POST', 'GET'])
def login():
error = None
if request.method == 'POST':
if valid_login(request.form['username'],
request.form['password']):
return log_the_user_in(request.form['username'])
else:
error = 'Invalid username/password'
# the code below is executed if the request method
# was GET or the credentials were invalid
return render_template('login.html', error=error)
要访问在URL(?key=value
)中提交的参数,您可以使用 args
属性:
searchword = request.args.get('key', '')
10. 文件上传
from flask import request
from werkzeug.utils import secure_filename @app.route('/upload', methods=['GET', 'POST'])
def upload_file():
if request.method == 'POST':
f = request.files['the_file']
#尽可能以原名字命名,中文会被去掉
f.save('/var/www/uploads/' + secure_filename(f.filename))
Flask框架(1)-程序基本结构的更多相关文章
- Python——Flask框架——程序的结构
一.项目结构 |-flasky |-app Flask程序一般都保存在这里 |-templates/ |-static/ |main/ |-__init__.py |-errors.py |-form ...
- flask框架的教程--程序的基本结构[二]
一个简单的程序 from flask import Flask # 实例化app 对象 app = Flask(__name__) @app.route('/') def index(): retur ...
- 基于Flask框架的Python web程序的开发实战 <二> 项目组织结构
看到第七章-大型程序的结构,备受打击,搞不清工厂函数.蓝本.单元测试,不理解这些对象/变量怎么传递的,感觉好乱,虽然按照源码都照抄了,还是不理解.... 缓缓先.... 本来网上的Flask的教程就比 ...
- python flask框架学习(二)——第一个flask程序
第一个flask程序 学习自:知了课堂Python Flask框架——全栈开发 1.用pycharm新建一个flask项目 2.运行程序 from flask import Flask # 创建一个F ...
- 基于Flask框架的Python web程序的开发实战 <一> 环境搭建
最近在看<Flask Web开发基于Python的Web应用开发实战>Miguel Grinberg著.安道译 这本书,一步步跟着学习Flask框架的应用,这里做一下笔记 电脑只安装一个P ...
- 2nd_SE-结对编程1-基于flask框架的四则运算生成器
0x00 Coding https://coding.net/u/nikochan/p/2nd_SE/git 0x01 写在前面 因为在上一个作业中,是基于python完成的Command程序.那么再 ...
- Flask框架搭建一个日程表
目录 前言 项目介绍 技术栈 Flask Web开发流程 一.搭建环境 1.1: 创建虚拟环境 1.2: 安装依赖包 1.3: 创建依赖包列表文件 1.4: 测试hello word 二.应用程序开发 ...
- Python——Flask框架
Flask框架相关知识构架 程序的基本结构 模板 Web表单 数据库 电子邮件 程序的结构 用户认证
- flask框架下的jinja2模板引擎(1)(模板渲染)
#转载请留言联系 模板是什么? 在 flask 框架中,视图函数有两个作用:处理业务逻辑和返回响应内容.在大型应用中,把业务逻辑和表现内容放在一起,会增加代码的复杂度和维护成本.模板作用即是承担视图函 ...
- Flask框架的学习与实战(二):实战小项目
昨天写了一篇flask开发环境搭建,今天继续,进行一个实战小项目-blog系统. blog系统很简单,只有一个页面,然而麻雀虽小五脏俱全.这里目的不是为了做项目而做项目,这篇文章本意是通过这次练习传达 ...
随机推荐
- Linux命令Find实例
转自: http://www.tecmint.com/35-practical-examples-of-linux-find-command/ 35 Practical Examples of Lin ...
- Hessian学习总结(一)——Hessian入门
一.远程通讯协议的基本原理 网络通信需要做的就是将流从一台计算机传输到另外一台计算机,基于传输协议和网络 IO 来实现,其中传输协议比较出名的有 http . tcp . udp 等等, http . ...
- ToolTip C#
yourToolTip = new ToolTip(); //The below are optional, of course, yourToolTip.ToolTipIcon = ToolTipI ...
- [Python] 文件扫描
文件扫描 下载 https://github.com/YouXianMing/FileManager 细节 1. 基于Python 3.60,其他版本未测试 2. 支持扫描深度,不设置则扫描全部,设置 ...
- Centos7:Failed to start LSB: Bring up/down networking
一开始配置的ifcfg-ens33 [root@cdh- ~]# cd /etc/sysconfig/network-scripts/ [root@cdh- network-scripts]# ls ...
- orocos_kdl学习(一):坐标系变换
KDL中提供了点(point).坐标系(frame).刚体速度(twist),以及6维力/力矩(wrench)等基本几何元素,具体可以参考 Geometric primitives 文档. Creat ...
- win32 进程崩溃时禁止弹出错误对话框
在程序初始化的时候加入以下代码即可: SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX); _set_abort_behav ...
- Swap 分区的2种方式 详解与例子
安装完Linux系统后,swap分区太小怎么办,怎么可以扩大Swap分区呢?有两个办法,一个是从新建立swap分区,一个是增加swap分区.下面介绍这两种方法: 第一您必须有root权限,过程中一定要 ...
- java中的synchronized同步代码块和同步方法的区别
下面这两段代码有什么区别? //下列两个方法有什么区别 public synchronized void method1(){} public void method2(){ synchronized ...
- c++11 输出时间
C++11中输出当前时间最直接的方法: std::time_t t2 = std::time(nullptr); cout << std::put_time(std::localtime( ...