最简单的hello world
#!/usr/bin/env python # encoding: utf-8 from flask import Flask app = Flask(__name__) @app.route('/') def index(): return 'hello world' if __name__ == '__main__': app.run(debug=True) #app.run(host='127.0.0.1', port=8000)
之后,访问http://localhost:5000
支持post/get提交
@app.route('/', methods=['GET', 'POST'])
多个url指向
@app.route('/') @app.route('/index')
不管post/get使用统一的接收
from flask import request args = request.args if request.method == 'GET' else request.form a = args.get('a', 'default')
处理json请求
request的header中
"Content-Type": "application/json"
处理时:
data = request.get_json(silent=False)
获取post提交中的checkbox
{%for page in pages %} <tr><td><input type=checkbox name=do_delete value="{{ page['id'] }}"></td><td> {%endfor%} page_ids = request.form.getlist("do_delete")
使用url中的参数
@app.route('/query/<qid>/') def query(qid): pass
在request开始结束dosomething
一般可以处理数据库连接等等
from flask import g app = ..... @app.before_request def before_request(): g.session = create_session() @app.teardown_request def teardown_request(exception): g.session.close()
注册Jinja2模板中使用的过滤器
@app.template_filter('reverse') def reverse_filter(s): return s[::-1]
或者
def reverse_filter(s): return s[::-1] app.jinja_env.filters['reverse'] = reverse_filter
可以这么用
def a():... def b():... FIL = {'a': a, 'b':b} app.jinja_env.filters.update(FIL)
注册Jinja2模板中使用的全局变量
JINJA2_GLOBALS = {'MEDIA_PREFIX': '/media/'} app.jinja_env.globals.update(JINJA2_GLOBALS)
定义应用使用的template和static目录
app = Flask(__name__, template_folder=settings.TEMPLATE_FOLDER, static_folder = settings.STATIC_PATH)
使用Blueprint
from flask import Blueprint bp_test = Blueprint('test', __name__) #bp_test = Blueprint('test', __name__, url_prefix='/abc') @bp_test.route('/') -------- from xxx import bp_test app = Flask(__name__) app.register_blueprint(bp_test)
实例:
bp_video = Blueprint('video', __name__, url_prefix='/kw_news/video') @bp_video.route('/search/category/', methods=['POST', 'GET']) #注意这种情况下Blueprint中url_prefix不能以 '/' 结尾, 否则404
使用session
包装cookie实现的,没有session id
app.secret_key = 'PS#yio`%_!((f_or(%)))s'
然后
from flask import session session['somekey'] = 1 session.pop('logged_in', None) session.clear() #过期时间,通过cookie实现的 from datetime import timedelta session.permanent = True app.permanent_session_lifetime = timedelta(minutes=5)
反向路由
from flask import url_for, render_template @app.route("/") def home(): login_uri = url_for("login", next=url_for("home")) return render_template("home.html", **locals())
上传文件
<form action="/image/upload/" method="post" enctype="multipart/form-data"> <input type="file" name="upload" />
接收
f = request.files.get('upload') img_data = f.read()
直接返回某个文件
return send_file(settings.TEMPLATE_FOLDER + 'tweet/tweet_list.html')
请求重定向
flask.redirect(location, code=302) the redirect status code. defaults to 302.Supported codes are 301, 302, 303, 305, and 307. 300 is not supported. @app.route('/') def hello(): return redirect(url_for('foo')) @app.route('/foo') def foo(): return'Hello Foo!'
获取用户真实ip
从request.headers获取
real_ip = request.headers.get('X-Real-Ip', request.remote_addr)
或者, 使用werkzeug的middleware 文档
from werkzeug.contrib.fixers import ProxyFix app.wsgi_app = ProxyFix(app.wsgi_app) return json & jsonp import json from flask import jsonify, Response, json data = [] # or others return jsonify(ok=True, data=data) jsonp_callback = request.args.get('callback', '') if jsonp_callback: return Response( "%s(%s);" % (jsonp_callback, json.dumps({'ok': True, 'data':data})), mimetype="text/javascript" ) return ok_jsonify(data)
配置读取方法
# create our little application :) app = Flask(__name__) # Load default config and override config from an environment variable app.config.update(dict( DATABASE='/tmp/flaskr.db', DEBUG=True, SECRET_KEY='development key', USERNAME='admin', PASSWORD='default' )) app.config.from_envvar('FLASKR_SETTINGS', silent=True) ------------------ # configuration DATABASE = '/tmp/minitwit.db' PER_PAGE = 30 DEBUG = True SECRET_KEY = 'development key' # create our little application :) app = Flask(__name__) app.config.from_object(__name__) app.config.from_envvar('MINITWIT_SETTINGS', silent=True)
几个不常用的方法
from flask import abort, flash abort if not session.get('logged_in'): abort(401) flash flash('New entry was successfully posted')
异步调用
想在flask的一个请求中处理异步, 除了使用消息系统, 可以用简单的线程处理
from threading import Thread def async(f): def wrapper(*args, **kwargs): thr = Thread(target=f, args=args, kwargs=kwargs) thr.start() return wrapper @async def dosomething(call_args): print call_args in a request handler, call `dosomething` error handler @app.errorhandler(404) def not_found_error(error): return render_template('404.html'), 404 @app.errorhandler(500) def internal_error(error): db.session.rollback() return render_template('500.html'), 500
项目配置
1.直接
app.config['HOST']='xxx.a.com' print app.config.get('HOST')
2.环境变量
export MyAppConfig=/path/to/settings.cfg app.config.from_envvar('MyAppConfig')
3.对象
class Config(object): DEBUG = False TESTING = False DATABASE_URI = 'sqlite://:memory:' class ProductionConfig(Config): DATABASE_URI = 'mysql://user@localhost/foo' app.config.from_object(ProductionConfig) print app.config.get('DATABASE_URI') # mysql://user@localhost/foo
4.文件
# default_config.py HOST = 'localhost' PORT = 5000 DEBUG = True app.config.from_pyfile('default_config.py')
EG. 一个create_app方法
from flask import Flask, g def create_app(debug=settings.DEBUG): app = Flask(__name__, template_folder=settings.TEMPLATE_FOLDER, static_folder=settings.STATIC_FOLDER) app.register_blueprint(bp_test) app.jinja_env.globals.update(JINJA2_GLOBALS) app.jinja_env.filters.update(JINJA2_FILTERS) app.secret_key = 'PO+_)(*&678OUIJKKO#%_!(((%)))' @app.before_request def before_request(): g.xxx = ... #do some thing @app.teardown_request def teardown_request(exception): g.xxx = ... #do some thing return app app = create_app(settings.DEBUG) host=settings.SERVER_IP port=settings.SERVER_PORT app.run(host=host, port=port) change log: 2013-09-09 create 2014-10-25 update

There are many methods to connect two lists in Python: 1. Use operators, which are simple but inefficient in large lists; 2. Use extend method, which is efficient but will modify the original list; 3. Use the = operator, which is both efficient and readable; 4. Use itertools.chain function, which is memory efficient but requires additional import; 5. Use list parsing, which is elegant but may be too complex. The selection method should be based on the code context and requirements.

There are many ways to merge Python lists: 1. Use operators, which are simple but not memory efficient for large lists; 2. Use extend method, which is efficient but will modify the original list; 3. Use itertools.chain, which is suitable for large data sets; 4. Use * operator, merge small to medium-sized lists in one line of code; 5. Use numpy.concatenate, which is suitable for large data sets and scenarios with high performance requirements; 6. Use append method, which is suitable for small lists but is inefficient. When selecting a method, you need to consider the list size and application scenarios.

Compiledlanguagesofferspeedandsecurity,whileinterpretedlanguagesprovideeaseofuseandportability.1)CompiledlanguageslikeC arefasterandsecurebuthavelongerdevelopmentcyclesandplatformdependency.2)InterpretedlanguageslikePythonareeasiertouseandmoreportab

In Python, a for loop is used to traverse iterable objects, and a while loop is used to perform operations repeatedly when the condition is satisfied. 1) For loop example: traverse the list and print the elements. 2) While loop example: guess the number game until you guess it right. Mastering cycle principles and optimization techniques can improve code efficiency and reliability.

To concatenate a list into a string, using the join() method in Python is the best choice. 1) Use the join() method to concatenate the list elements into a string, such as ''.join(my_list). 2) For a list containing numbers, convert map(str, numbers) into a string before concatenating. 3) You can use generator expressions for complex formatting, such as ','.join(f'({fruit})'forfruitinfruits). 4) When processing mixed data types, use map(str, mixed_list) to ensure that all elements can be converted into strings. 5) For large lists, use ''.join(large_li

Pythonusesahybridapproach,combiningcompilationtobytecodeandinterpretation.1)Codeiscompiledtoplatform-independentbytecode.2)BytecodeisinterpretedbythePythonVirtualMachine,enhancingefficiencyandportability.

ThekeydifferencesbetweenPython's"for"and"while"loopsare:1)"For"loopsareidealforiteratingoversequencesorknowniterations,while2)"while"loopsarebetterforcontinuinguntilaconditionismetwithoutpredefinediterations.Un

In Python, you can connect lists and manage duplicate elements through a variety of methods: 1) Use operators or extend() to retain all duplicate elements; 2) Convert to sets and then return to lists to remove all duplicate elements, but the original order will be lost; 3) Use loops or list comprehensions to combine sets to remove duplicate elements and maintain the original order.


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Atom editor mac version download
The most popular open source editor

SAP NetWeaver Server Adapter for Eclipse
Integrate Eclipse with SAP NetWeaver application server.

PhpStorm Mac version
The latest (2018.2.1) professional PHP integrated development tool

SublimeText3 Chinese version
Chinese version, very easy to use

SublimeText3 Linux new version
SublimeText3 Linux latest version
