Flask - Quick Start
Notes
Flask is actually called a “microframework”, meaning the creators of Flask aims to keep the core simple and lightweight but easily extensible.
https://anna-carey.medium.com/learning-flask-after-ruby-on-rails-e8c0708ffd40
Things
a microframework for Python based on Werkzeug, Jinja 2 and good intentions. Flask is intended for getting started very quickly and was developed with best intentions in mind.
- Patterns for Flask
- Flask API
- Jinja
- Werkzeug
Flask real world examples
Installation
Dependencies
- Werkzeug Python Interface between Applications and Servers
- Jinja: Template language renders the pages
- MarkupSafe: comes with Jinja. Escapes untrusted input when render template.
- ItsDangerous: Secure signs data. Used to protect Flask’s session cookies
- Click: Writing command line applications. Provide
flask
command.
Optional:
- Blinker - Provides support for Signals
- python-dotenv
- Watchdog: Reloader for development server.
Run
flask --app hello run --debug
Routing
Variable Rules
string
Any text without /int
positive integersfloat
positive floating pointpath
likestring
but also accepts slashesuuid
Accept UUID strings
File uploads
- Use
request.files
- Use
werkzeug.utils
to callsecure_filename
Cookies
Redirects and Errors
redirect(url_for('login'))
abort(401)
if errors
Response
https://flask.palletsprojects.com/en/2.2.x/quickstart/#about-responses
- Flask sẽ dựa vào response object để đoán xem nên trả về kiểu dữ liệu gì. String/ Iterator/ Dict, …
- Muốn hold lại response để chỉnh sửa, thử dùng
make_response()
APIs with JSON
- Chỉ cần response trả về là
dict
hoặclist
thì Flask sẽ tự động convert sang JSON response.
Session
-
Lưu trữ thông tin vào session, trao đổi với client qua cookies cryptographically. - User có thể đọc thông tin từ cookies nhưng không thể modify nó, trừ khi biết chính xác secret key được sử dụng cho chữ ký. (Cái này tương đương với Secret key trong Rails)
-
Generate good secret keys bằng lệnh:
Message Flashing
flash()
get_flashed_messages()
https://flask.palletsprojects.com/en/2.2.x/patterns/flashing/
Logging
https://flask.palletsprojects.com/en/2.2.x/errorhandling/
Deploy
https://flask.palletsprojects.com/en/2.2.x/deploying/
Key takeaways
- Flask cũng có escapes khi render HTML. Cần tìm hiểu về strong parameters?
- Params được put vào trong
views
functions - URL Building (giống URL helper trong Rails) bên này dùng
url_for()
từ thằng Flask luôn. - Flask (mức basic) dồn hết resource về 1 function. Define routes, methods, code controller, render views, … trong hết 1 file???
- Để tránh việc render file views trong file controller luôn + escape automaticaly thì bên Flask sử dụng Jinja2 để hỗ trợ code render, sử dụng qua hàm
render_template
. Trong đó có thể access các hàm helper:config, request, session, g, url_for(), get_flashed_messages()
- Get information từ
request
object. searchword = request.args.get('key', '')
to get args key
Questions
- Tại sao route và functions name không map nhau mà nó vẫn vào được? Tính theo block chăng?
- Strong parameters trong Flask?