Miguel's flask mega tutorial
Notes
- flask:
- Use
url_forto build and reference URLs -
app.before_request,app.after_request(after_requestcan be used to measure database query performance) - Rotating file handler
- Don't use
window.history.backin forms - Move logic away from
views - Better return query objects than query results
- Pagination (
yield_perin sqlalchemy) - Unit test:
- use a different test database
- regression testing: write a test for every new bug
- Debugging:
pdb.set_trace()
- Use
- Jinja:
- Global variables/utilities like
config,g,session,url_forare available in Jinja templates -
render_templatecan be used in rendering HTML email templates
- Global variables/utilities like
- Useful plugins:
coverage,cProfile, werkzeug profiler
Code snippets
-
pass variable in URL:
python @app.route('/index/<int:page>') def turnto(page): -
use
includein control statements in Jinja:{% for post in posts %} {% include "post.html" %} {% endfor %} -
rollback when error occurred:
python @app.errorhandler(500) def err500(): dbsession.rollback() -
Python's fake mail server:
python -m smtpd -n -c DebuggingServer localhost:1025 -
Asynchoronous decorator:
```python from threading import Thread from functools import wraps
def async(f): @wraps(f) def wrapper(args, *kwargs): thr = Thread(target = f, args = args, kwargs = kwargs) thr.start() return wrapper ```
-
Expose new global variables in Jinja:
python app.jinja_env.globals['momentjs'] = momentjs
Comments
Comments powered by Disqus