Hướng dẫn dùng flask icon python

Hướng dẫn dùng flask icon python

Đã đăng vào thg 12 28, 2015 5:54 SA 3 phút đọc

Với mỗi lập trình viên Python phát triển web chắc đã quá quen thuộc với Django. Hôm nay tôi giới thiệu về framework có tuổi đời trẻ hơn và đang phát triển mạnh mẽ là Flask.
Là một lập trình viên tôi từng code web với php, ruby, python. Tôi phát hiện ra Flask là một trong framework mềm dẻo nhất. Đúng với những gì nó được phát triển từ python.
Ứng dụng đầu tiên tôi viết là một micro blog. Hôm nay tôi sẽ chia sẻ về ứng dụng này.
Nếu bạn có máy tính và chạy python thì thật tốt bạn có thể bắt đầu ngay. Nếu không bạn có thể tìm hiểu cài đặt chạy một môi trường ảo của python qua bài viết trước pyenv.
Cài đặt Flask
Đầu tiên bạn mở terminal và cài một môi trường ảo với câu lệnh:

$ python -m venv flask

Tạo một môi trường cho ứng dụng

$ virtualenv flask

Trên Linux bạn sẽ thấy các lệnh cài đặt cho flask:

$ flask/bin/pip install flask
$ flask/bin/pip install flask-login
$ flask/bin/pip install flask-openid
$ flask/bin/pip install flask-mail
$ flask/bin/pip install flask-sqlalchemy
$ flask/bin/pip install sqlalchemy-migrate
$ flask/bin/pip install flask-whooshalchemy
$ flask/bin/pip install flask-wtf
$ flask/bin/pip install flask-babel
$ flask/bin/pip install guess_language
$ flask/bin/pip install flipflop
$ flask/bin/pip install coverage

Bây giờ bạn có 1 thư mục flask trong thư mục microblog. bạn có thể bắt đầu viết ứng dụng đầu tiên của mình. Bạn cd ra folder microblog và tạo cấu trúc thư mực cơ bản cho ứng dụng:

$ mkdir app
$ mkdir app/static
$ mkdir app/templates
$ mkdir tmp

Ở đây thư mục app bạn sẽ đặt các package của ứng dụng. Static bạn đặt các css, js, image. thư mục templates đặt các template.
Tiếp theo trong thư mục app sẽ viết khai báo script cho thư mục app(app/init.py)

from flask import Flask

app = Flask(__name__)
from app import views

Đoạn script trên sẽ tạo ra đối tượng (class Flask) và import views module mà chúng ta sẽ viết.

Views là điều khiển các response cho request từ browser hoặc client khác. Mỗi module đuược viết bằng python và mỗi function view được mapped tới một hoặc nhiều request URLs.

Chúng ta viết function đầu tiên trong (file app/views.py):

from app import app

@app.route('/')
@app.route('/index')
def index():
    return "Hello, World!"

Đoạn view đơn giản trả về 1 string hiển thị cho client là web browser. 2 route trên tạo ra mapping từ URLs / và /index tới function

Bước cuối cùng tạo ra script khởi chạy web server cho ứng dụng. Tạo ra sript run.py và đặt và thư mục root:

from app import app
app.run(debug=True)

Bây giờ để khởi chạy ứng dụng. bạn chạy đoạn script:

$ chmod a+x run.py

Sau đó:

./run.py

Bây giờ bạn có thể bật web browse lên và chay:

http://localhost:5000

Tổng kết
Trong bài viết tôi đã hướng dẫn các bạn cấu hình và chạy ứng dụng đầu tiên với framework Flask. Trong bài sau tôi sẽ hướng dẫn các bạn add thêm các template cho ứng dụng.

All rights reserved

Hôm nay mình sẽ tiếp tục hướng dẫn các bạn tạo form web với framework Flask. Đối với mỗi website không thể thiếu form là phần tương tác người dùng được, và với framework trẻ Flask cũng được cộng đồng phát triển nhiều packet hỗ trợ form. Trong đó mình xin giới thiệu Flask_WTF extension. Chúng ta phải thiết lập cho extension này:

1. Thiết lập

chúng ta thiết lập cho file config.py trong folder root của microblog:

WTF_CSRF_ENABLED = True
SECRET_KEY = 'you-will-never-guess'

Trên đây là 2 thông số để thiêt lập ngăn ngừa tấn công CSRF và mã hóa token dùng trong validate form.

Tiếp theo ta cần khai báo cho Flask để đọc thông số file config trên(file app/__init__.py)

from flask import Flask

app = Flask(__name__)
app.config.from_object('config')

from app import views

2. Login Form

Chúng ta sẽ thử khởi tạo Login form, nó sẽ có 2 trường: username và password. Chúng ta sẽ có user login sử dụng OpenID. OpenIDs là extension sử dụng authentication bởi provider của OpenIDs. Do đó chúng ta không cần validate trường password. Ngoài ra 1 form login thường có checkbox "remember me". (file app/forms.py):

from flask.ext.wtf import Form
from wtforms import StringField, BooleanField
from wtforms.validators import DataRequired

class LoginForm(Form):
    openid = StringField('openid', validators=[DataRequired()])
    remember_me = BooleanField('remember_me', default=False)

3. Form Template

Chúng ta tạo template chứa HTML.(file app/templates/login.html):

<!-- extend from base layout -->
{% extends "base.html" %}

{% block content %}
  <h2>Sign In</h2>
  <form action="" method="post" name="login">
      {{ form.hidden_tag() }}
      <p>
          Please enter your OpenID:<br>
          {{ form.openid(size=80) }}<br>
      </p>
      <p>{{ form.remember_me }} Remember Me</p>
      <p><input type="submit" value="Sign In"></p>
  </form>
{% endblock %}

tiếp theo chúng ta khai báo form trong app/view.py: giúp flask sẽ nhận diện đợc form

from flask import render_template, flash, redirect
from app import app
from .forms import LoginForm

# index view function suppressed for brevity

@app.route('/login', methods=['GET', 'POST'])
def login():
    form = LoginForm()
    return render_template('login.html',
                           title='Sign In',
                           form=form)

Để validate form chúng ta sẽ update app/view.py:

@app.route('/login', methods=['GET', 'POST'])
def login():
    form = LoginForm()
    if form.validate_on_submit():
        flash('Login requested for OpenID="%s", remember_me=%s' %
              (form.openid.data, str(form.remember_me.data)))
        return redirect('/index')
    return render_template('login.html',
                           title='Sign In',
                           form=form)

Như vậy việc tạo form login đã cơ bản hoàn thành. Đối với các website tích hợp chức năng đăng nhập bằng mạng xã hội là cần thiết. dùng OpenID việc này càng trở nên dễ dàng hơn. Chúng ta có thể thêm vào file config.py:

WTF_CSRF_ENABLED = True
SECRET_KEY = 'you-will-never-guess'

OPENID_PROVIDERS = [
    {'name': 'Google', 'url': 'https://www.google.com/accounts/o8/id'},
    {'name': 'Yahoo', 'url': 'https://me.yahoo.com'},

và update lại file view.py:

@app.route('/login', methods=['GET', 'POST'])
def login():
    form = LoginForm()
    if form.validate_on_submit():
        flash('Login requested for OpenID="%s", remember_me=%s' %
              (form.openid.data, str(form.remember_me.data)))
        return redirect('/index')
    return render_template('login.html',
                           title='Sign In',
                           form=form,
                           providers=app.config['OPENID_PROVIDERS'])

Tổng kết

Chúng ta đã tìm hiểu và biết cách sử dụng form với WTF_Form trong Flask. Trong bài sau tôi sẽ hướng dẫn các bạn tạo database với Flask.