博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Flask框架(1)-程序基本结构
阅读量:6239 次
发布时间:2019-06-22

本文共 3297 字,大约阅读时间需要 10 分钟。

1. 安装Flask

1.1 安装虚拟环境

mkdir myprojectcd myprojectpy -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 Flaskapp = 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_forapp = Flask(__name__)@app.route('/')def index():    return 'index'@app.route('/login')def login():    return 'login'@app.route('/user/
')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 '

Hello World!

',400

 

6.2  返回respones对象

@app.route('/')def index():    response = app.make_response('

This document carries a cookie

') response.set_cookie('name', 'scott') return response

 

6.3 重定向

from flask import redirectapp = 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 自动为你配置模板引擎。

要呈现模板,您可以使用该 方法。您所要做的就是提供模板的名称以及想要作为关键字参数传递给模板引擎的变量。以下是如何呈现模板的简单示例:

from flask import render_template@app.route('/hello/')@app.route('/hello/
')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)中提交的参数,您可以使用 属性:

searchword = request.args.get('key', '')
10. 文件上传 
from flask import requestfrom 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))  

 

转载地址:http://bydia.baihongyu.com/

你可能感兴趣的文章
SQL语句注入的问题
查看>>
jQueryEasyUI Messager基本使用
查看>>
【C语言学习趣事】_33_关于C语言和C++语言中的取余数(求模)的计算_有符号和无符号数的相互转换问题...
查看>>
Tensorboard教程:显示计算图中节点信息
查看>>
java 线程基本概念 可见性 同步
查看>>
Java:JUnit包
查看>>
unity_快捷键
查看>>
洛谷P3358 最长k可重区间集问题(费用流)
查看>>
洛谷P1251 餐巾计划问题(费用流)
查看>>
Beta冲刺(2/5)(麻瓜制造者)
查看>>
vs2012编码的UI测试使用教程
查看>>
android 在非UI线程更新UI仍然成功原因深入剖析
查看>>
清北NOIP训练营集训笔记——图论
查看>>
oracle ORA-00060死锁查询、表空间扩容
查看>>
转载自https://github.com/jsfront/src/blob/master/css.md
查看>>
MySQL索引优化分析(上)
查看>>
jquery $().each,$.each的区别
查看>>
sql server 2000/2005 游标的使用操作(转)
查看>>
Tomcat 部署 Web 通过 ip 直接访问项目
查看>>
Cache Fusion
查看>>