This entry is part 2 of 2 in the series Thư viện Flask
Hướng dẫn Flask Python – Tự học flask python cho người mới bắt đầu là nội dung sẽ được trình bày trong bài viết này. Đầu tiên, tôi sẽ đi giải thích chi tiết cho bạn từng dòng code của chương trình Hello World sử dụng Flask. Tiếp theo sẽ là một hướng dẫn các kiến thức từ cơ bản tới chuyên sâu để giúp bạn làm chủ thư viện Flask trong Python.
Ở bài viết trước, mình đã giúp các bạn tìm hiểu Flask python là gì, các hướng dẫn cài đặt thư viện Flask trong python và chạy thử một chương trình Hello World!. Ở phần đầu của bài viết ngày hôm nay, mình sẽ giải thích từng dòng code của chương trình Hello World này. Sử dụng ví dụ và giải thích sẽ là cách hướng dẫn flask python hợp lý nhất.
- Giải thích chương trình Hello World
- Hướng dẫn Flask Python
- Định tuyến[Routing]
- Quy tắc dùng tham số
- Methods
- Static files
- Rendering Templates
- Accessing Request Data
- Xây dựng trang đăng nhập sử dụng Flask
- Triển khai code
- Giải thích code
- Kết luận
Giải thích chương trình Hello World
Hướng dẫn Flask Python
Định tuyến[Routing]flask import Flask app=Flask[__name__]=Flask[__name__] @app.route['/']app.route['/'] Quy tắc dùng tham sốhello_world[]: Methodsreturn 'Hello, World!' if__name__=='__main__':__name__=='__main__': app.run[]app.run[] |
Static files
Rendering Templates
Accessing Request Data
Xây dựng trang đăng nhập sử dụng Flask
Triển khai code
* Running on //127.0.0.1:5000/ [Press CTRL+C to quit]
Giải thích code
Kết luận
Đây là đoạn code mà tôi sử dụng trong ví dụ hướng dẫn Flask python ở bài giới thiệu.
from flask import Flask
Định tuyến[Routing]
Quy tắc dùng tham số
Methods
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | Định tuyến[Routing]flask import Flask app=Flask[__name__]=Flask[__name__] @app.route['/']app.route['/'] Quy tắc dùng tham sốhome[]: Methodsreturn'Home page' @app.route['/user']app.route['/user'] Static filesuser[]: Rendering Templatesreturn'User page' @app.route['/about']app.route['/about'] Accessing Request Dataabout[]: Xây dựng trang đăng nhập sử dụng Flaskreturn'About page' if__name__=='__main__':__name__=='__main__': app.run[]app.run[] |
Triển khai code
- Giải thích code
- Kết luận
- Đây là đoạn code mà tôi sử dụng trong ví dụ hướng dẫn Flask python ở bài giới thiệu.
Quy tắc dùng tham số
Methods
@app.route['/user/']app.route['/user/'] Static filesshow_user_profile[username]: Rendering Templates# show the user profile for that user Accessing Request Datareturn'Hello %s'% username @app.route['/post/']app.route['/post/'] Xây dựng trang đăng nhập sử dụng Flaskshow_post[post_id]: Triển khai code# show the post with the given id, the id is an integer Giải thích codereturn'Post %d' %post_id @app.route['/path/']app.route['/path/'] Kết luậnshow_subpath[subpath]: Đây là đoạn code mà tôi sử dụng trong ví dụ hướng dẫn Flask python ở bài giới thiệu.# show the subpath after /path/ from flask import Flaskreturn'Subpath %s' %subpath |
def hello_world[]:
Các loại kiểu dữ liệu có thể có là:
hello_world[] 1 | [mặc định] Chấp nhận văn bản bất kỳ ngoại trừ dấu / |
hello_world[] 2 | Chấp nhận số nguyên |
hello_world[] 3 | Chấp nhận số thực |
hello_world[] 4 | Giống string nhưng chấp nhận cả dấu / |
hello_world[] 5 | Chấp nhận UUID string |
Methods
Các ứng dụng web sử dụng các method khác nhau khi truy cập một url. Mặc định, một request sẽ sử dụng method GET nếu không chỉ định. Bạn có thể chỉ định method cho từng route như sau:
from flask import requestflask import request @app.route['/login',methods=['GET','POST']]app.route['/login',methods=['GET','POST']] def login[]:login[]: ifrequest.method=='POST':if request.method=='POST': returndo_the_login[]returndo_the_login[] else:else: returnshow_the_login_form[]return show_the_login_form[] |
Hai method được sử dụng phổ biến nhất là GET và POST. Một ví dụ đơn giản nhất là sẽ dùng GET để tạo form đăng nhập và thực hiện POST khi người dùng click button đăng nhập.
Lưu ý: Nếu bạn chưa biết GET, POST là gì hay khi nào sử dụng cái nào, hãy đọc thêm bài viết này.
Ở phần cuối của bài hướng dẫn flask python này, tôi sẽ viết cho bạn ví dụ 1 web đăng nhập. Bởi vì chúng còn một số kiến thức liên quan cần học trước ở các phần tiếp theo.
Chú ý: Để có thể sử dụng các method GET, POST,… thuận tiện nhất, bạn nên cài và sử dụng ứng dụng Postman.
Static files
Các web ứng dụng cũng cần có những tệp tin tĩnh[static files]. Đó có thể là những file css, javascript. Flask cũng hỗ trợ điều này cho bạn. Bạn chỉ cần lưu các file tĩnh này vào thư mục /hello_world[]
6 của project.
Để tạo url cho static file, sử dụng từ khóa ‘static’ và truyền vào đường dẫn file như sau:
url_for['static',filename='style.css']['static',filename='style.css'] |
Khi đó, file style.css của bạn phải ở trong thư mục static. Khi đó nó có đường dẫn từ root project là hello_world[]
7.
Rendering Templates
Flask hỗ trợ bạn reder ra các trang html đi cùng một số tham số. Để tạo và hiển thị nội dung file html, bạn hãy sử dụng hàm hello_world[]
8 đã được xây dựng sẵn.
Nội dung của application.py
from flask import render_templateflask import render_template @app.route['/hello/']app.route['/hello/'] @app.route['/hello/']app.route['/hello/'] def hello[name=None]:hello[name=None]: returnrender_template['hello.html',name=name]return render_template['hello.html',name=name] |
Khi đó, Flask sẽ tìm kiếm file hello.html trong thư mục hello_world[]
9 cùng cấp với thư mục chứa ứng dụng Flask của bạn.
Chẳng hạn như thế này,
/application.pyapplication.py /templatestemplates /hello.html/hello.html |
Nội dung của app.run[]
0:
HellofromFlasktitle>HellofromFlask {%ifname%}%ifname%} Hello{{name}}!Hello {{name}}! {%else%}%else%} Hello,World!Hello,World! {%endif%}% endif%} |
Hãy thử chạy xem có gì khác biệt nhé. Giá trị app.run[]
1 mà bạn truyền vào trên url sẽ được xuất hiện ở vị trí app.run[]
2 trong file html kia.
Accessing Request Data
Để lấy dữ liệu form. bạn cần import module request của flask. Sử dụng app.run[]
3 để lấy giá trị của trường ‘key’
from flask import requestflask import request username=request.form['username']=request.form['username'] password = request.form['password'] = request.form['password'] |
def login[]:
Hai method được sử dụng phổ biến nhất là GET và POST. Một ví dụ đơn giản nhất là sẽ dùng GET để tạo form đăng nhập và thực hiện POST khi người dùng click button đăng nhập.
Lưu ý: Nếu bạn chưa biết GET, POST là gì hay khi nào sử dụng cái nào, hãy đọc thêm bài viết này.
Ở phần cuối của bài hướng dẫn flask python này, tôi sẽ viết cho bạn ví dụ 1 web đăng nhập. Bởi vì chúng còn một số kiến thức liên quan cần học trước ở các phần tiếp theo.
/flask-login-page-exampleflask-login-page-example /static/static /bootstrap.min.css/bootstrap.min.css /templates/templates /login.html/login.html /app.py/app.py |
Chú ý: Để có thể sử dụng các method GET, POST,… thuận tiện nhất, bạn nên cài và sử dụng ứng dụng Postman.
Static files
Các web ứng dụng cũng cần có những tệp tin tĩnh[static files]. Đó có thể là những file css, javascript. Flask cũng hỗ trợ điều này cho bạn. Bạn chỉ cần lưu các file tĩnh này vào thư mục /hello_world[]
6 của project.
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
HellofromFlaskFlask Intro-login page
HellofromFlaskPlease login
{%iferror%}{%if error%} Error:{{error}}Error:{{error}} {%endif%}{% endif%} Các bạn để ý tới các tham số được bao bởi 2 cặp ngoặc nhọn Các bạn để ý tới các tham số được bao bởi 2 cặp ngoặc nhọn Các bạn để ý tới các tham số được bao bởi 2 cặp ngoặc nhọn |
Nội dung file app.py
"""
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | Created by nguyenvanhieu.vn at 9/16/2018" from flask import Flask,render_template,redirect,url_for,request Created by nguyenvanhieu.vn at 9/16/2018"" from flask import Flask,render_template,redirect,url_for,requestflask import Flask,render_template,redirect,url_for,request app=Flask[__name__]= Flask[__name__] @app.route['/']app.route['/'] def welcome[]:welcome[]: returnredirect['/login']returnredirect['/login'] @app.route['/home']app.route['/home'] def home[]:home[]: return'Login success!'return'Login success!' # Route for handling the login page logic @app.route['/login',methods=['GET','POST']]app.route['/login',methods=['GET', 'POST']] def login[]:login[]: error=Noneerror=None ifrequest.method=='POST':ifrequest.method=='POST': ifrequest.form['username']!='admin'orrequest.form['password']!='admin':if request.form['username']!='admin'orrequest.form['password']!='admin': error='Invalid Credentials. Please try again.'error ='Invalid Credentials. Please try again.' else:else: returnredirect[url_for['home']]returnredirect[url_for['home']] returnrender_template['login.html',error=error]return render_template['login.html',error=error] if__name__=='__main__':__name__=='__main__': app.run[host='localhost',port=5000,debug=True]app.run[host='localhost', port=5000,debug=True] |
Giải thích code
Hàm app.run[]
5 của root url sẽ tự động chuyển hướng sang trang đăng nhập bằng lệnh app.run[]
6
Url app.run[]
7 ở đây sẽ trả ra trang đăng nhập nếu method là GET, và thực hiện đăng nhập và thông báo lỗi[nếu có] sử dụng method POST khi bạn click vào button Login. Bạn sẽ được trả về trang home nếu đăng nhập thành công. Ngược lại, sẽ có thông báo lỗi khi đăng nhập không thành công.
Chú ý: Do là bài hướng dẫn, tôi sẽ thực hiện kiểm tra username và password đơn giản như trên.Do là bài hướng dẫn, tôi sẽ thực hiện kiểm tra username và password đơn giản như trên.
Để lấy giá trị các trường username và password. Bạn sử dụng hai câu lệnh như ở phía trên app.run[]
8.
Trong hàm main, phương thức app.run[] có thêm các tham số sau:
- host: Chỉ định hostname[đường dẫn] để truy cập website của chúng ta. Giá trị của chúng thường là: localhost, 127.0.0.1, hoặc 0.0.0.0 khi deploy.
- port: Chỉ định port cho ứng dụng web, mặc định là 5000.
- debug: Nếu là True, Flask sẽ tự động nhận biết thay đổi code và tự động restart lại ứng dụng. Tính năng này rất hay khi bạn đang sửa lỗi hoặc deploy lên global – chẳng hạn như nền tảng Heroku.
Source code đầy đủ của ví dụ này các bạn có thể xem và download tại trang github của tôi.
Kết luận
Như vậy, bài viết hướng dẫn flask python này của Nguyễn Văn Hiếu Blog đã trình bày cho bạn các kiến thức căn bản và chi tiết nhất về Flask. Qua bài viết này, chắc hẳn các bạn đã có thể tự viết một số ứng dụng Flask hay ho rồi.
Chúc các bạn học tập tốt!
Tài liệu tham khảo
[1]. //flask.pocoo.org/docs/1.0/quickstart/