Hướng dẫn route python flask - định tuyến python bình

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 http://127.0.0.1:5000/ (Press CTRL+C to quit)

Giải thích code

Kết luận

Hướng dẫn route python flask - định tuyến python bình

Đâ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:

<!doctypehtml>

HellofromFlasktitle>HellofromFlask</title>

{%ifname%}%ifname%}

  Hello{{name}}!<h2>Hello {{name}}!</h2>

{%else%}%else%}

  Hello,World!<h2>Hello,World!</h2>

{%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

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

HellofromFlask<title>Flask Intro-login page</title>

    <meta name="viewport"content="width=device-width, initial-scale=1.0">

    <link href="static/bootstrap.min.css"rel="stylesheet">

</head>

<body>

<div class="container">

HellofromFlask<h2>Please login</h2>

    <br>

    <form action=""method="post">

        <div class="form-group">

            <input type="text"class="form-control"style="width:50%;"placeholder="Username"name="username"value="{{

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.>

        </div>

        <div class="form-group">

            <input type="password"class="form-control"style="width:50%;" placeholder="Password"name="password"

Accessing Request Datavalue="{{

Để 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’>

        </div>

        <input class="btn btn-success"type="submit"value="Login">

    </form>

    {%iferror%}{%if error%}

    Error:{{error}}<pclass="error"><strong>Error:</strong>{{error}}

        {%endif%}{% endif%}

Các bạn để ý tới các tham số được bao bởi 2 cặp ngoặc nhọn app.run()4. Đây sẽ là các tham số động mà flask dùng để render ra trang html ở phía trình duyệt./div>

Các bạn để ý tới các tham số được bao bởi 2 cặp ngoặc nhọn app.run()4. Đây sẽ là các tham số động mà flask dùng để render ra trang html ở phía trình duyệt./body>

Các bạn để ý tới các tham số được bao bởi 2 cặp ngoặc nhọn app.run()4. Đây sẽ là các tham số động mà flask dùng để render ra trang html ở phía trình duyệt./html>

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:

  1. 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.
  2. port: Chỉ định port cho ứng dụng web, mặc định là 5000.
  3. 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.
Hướng dẫn route python flask - định tuyến python bình
Giao diện trang đăng nhập sử dụng Flask

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]. http://flask.pocoo.org/docs/1.0/quickstart/