Thứ Tư, 11 tháng 12, 2013

Flask

Flask

 

http://flask.pocoo.org/docs/
https://github.com/mitsuhiko/flask/tree/master/flask

Học Flask để làm gì? Ờ, đơn giản nó dùng để tạo ra các complete web application
   Nếu bạn muốn đi sâu hơn nữa vào nội dung của Flask, bạn có thể check out tài liệu API. Các  bản mẫu chung được miêu tả trong  phần "Pattern for Flask"
  Flask sử dụng hai thư viện hỗ trợ : engine mẫu JinJa2 và bộ công cụ WSGI werkzeug

User's Guide

Trong phần này của tài liệu, Chủ yếu làvăn xuôi, bắt đầu với một số Background information về Flask. Rồi sau đó từng bước hướng dẫn phát triển Web với Flask

Lời tựa
Hãy xem phần này trước khi bạn bắt đầu. Hi vọng nó sẽ giải quyết các câu hỏi về mục đích cũng như kết quả của Project này. bạn có thể hoặc khong cần sử dụng chúng tùy vào mỗi người

Flask là một microflamework

Cấu hình và quy ước

 Flask có một số configuration values (giá trị cấu hình-trong việc lựa chon cấu hình), các mặc định phù hợp  và một số quy ước khi chương trình dc bắt đầu. Các mẫu quy ước và các file tĩnh được tập hợp bên trong các subdirectories trong mã nguồn python ứng dụng của bạn với các static name và temparate name riêng biệt. Chúng có thể chuyển đổi được khi chương trình được khởi động

Phát triển với Flask


   Khi bạn đã cài flask và chạy chúng, bạn sẽ tìm thấy sự đa dạng của các mở rộng có sẵn trong chưongw trình để tích hợp các project của bạn cho production. Nhóm flask Core đánh giá các mở rộng này và đẳm bảo các extension đã được chấp nhận này không bị phá vỡ trong các phiên bản sau này
   khi codebase của bạn phát triển, bạn có thể tự do tạo ra các quyết đinh thiết kế phù hợp cho project của bạn. Flask sẽ tiếp tục cung cấp cho bạn một lớp keo gắn đơn giản (a very simple glue layer ) để chương trình của bạn tốt nhất. bạn có thể thục hiện các mô hình tối ưu trong SQLAlchemy hoặc các công cụ database khác............
 Flask có chứa nhiều các hooks để điều chỉnh các behavier của nó. Nếu bạn cần điều chỉnh nhiều hơn thì trong Flask class tạo lên các subclassing....

Installation

http://flask.pocoo.org/docs/installation/#installation

Flask phụ thuộc và hai thư viên là jinja2 và werkzeug .Werkzeug là một toolkit cho WSGI - Giao diện Python chuẩn giữa các ứng dụng web và một sự đa dạng các server cho cả phát triển và triển khai . Jinja2 đưa ra các khuôn mẫu
 Để thực hiện tất cả những thứ đó trên máy tính của bạn , có rất nhiều cách. Và một cách tối ưu là dùng virtualent: Một không gian ảo khiến abnj có thể cài đặt bất kì cái gì lên đó mà không hề ảnh hưởng đến các project khác

Quickstart


http://flask.pocoo.org/docs/quickstart/#quickstart

Chắc chắn rằng, virtualenv của bạn đã cài đặt Flask
Một ứng dụng nhỏ:

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello World!'

if __name__ == '__main__':
    app.run()


trong ví dụ trên:
1. đầu tiên chúng ta goi Flask ra từ flask
2. Tạo ra một instance app. Đối số đầu tiên là tên của module hay package của ứng dụng. Nếu bạn sử dụng một single module thì bạn nên sử dụng __name__ vì còn phụ thuộc vào việc nó được khởi động như một application hay là được import như module thì tên sẽ khác nhau.(__main___ có tác dụng so sananh name với tên thực tế được nhập) Điều này là caanf thiết để cho Flask biết nơi để tìm các template và các static files và thực thi chúng
3. Chúng ta sử dụng Route() decorator để chỉ cho Flask biết URL nào khởi động Function của chúng ta
 4. The function được nhận một cái tên để tạo ra URL kiên kết với Function riêng đó, và trả về những gì bạn muốn hiển thị trên trình duyệt của người dùng
5. Cuối cùng chúng ta sử dụng hàm Run() để chạy ứng dụng đó trên local server của chúng ta. If __name__== "__main_" là để chắc chắn rằng chúng ta chạy ứng dụng đó như một script chứ không phait từ một module được import 


để stop server chúng ta ấn ctrl c
 ứng dụng sẽ được hiện trên host : http://127.0.0.1:5000/ khi chúng ta chạy nó


 Để đổi tên host, chúng ta có thể làm như sau:
                      Run(host = '0.0')
Khi ấy host hiển thị sẽ là : http://0.0.1:5000/


   Chế độ Debug:
Là chế độ khởi chạy chương trình bằng các dòng lệnh mà không cần thao tác bằng tay mỗi khi chúng ta change code
                      .....
                      app.debug = True
                      run()
hoặc
                      run(debug=True)



Routing
 
các ứng dụng web hiện nay có các URL tuyệt vời. Điều này giúp cho người dùng có thể nhớ được các URL, đặc biệt thuận tiện cho các ứng dụng được sử dụng trên các thiết bị lưu động. Nếu người dùng có thể trực tiếp tới trang được yêu cầu chỉ bằng một cái click  vào bảng liệt kê danh mục ứng dụng (index)
 thì người ta sẽ rất thích và sẽ quay trở lại
    The Route() decorator đùng để liên kết các function tới URL :

@app.route('/')
def index():      => cai này giúp khi bạn nhấn chữ "G" trên Url sẽ hiện google.com.Kiểu thế
    return 'Index Page'

@app.route('/hello')
def hello():
    return 'Hello World'

 Bạn có thể tạo ra các phần nhất định cho một URLs động và  đính nhiều Ruler  tới một Function

 Các variable rules (là các rule có thể tùy biến)
Để add các variable parts và một Rule, bạn có thể dùng các section đặc biệt như <variable_name>, được côi như là các keywords arguament để liên kết với các function của bạn. hoặc chúng ta có thể dùng <converter: variable_name> để xác định rõ một rule với Converter:

@app.route('/user/<username>')
def show_user_profile(username):
    # show the user profile for that user
    return 'User %s' % username

@app.route('/post/<int:post_id>')
def show_post(post_id):
    # show the post with the given id, the id is an integer
    return 'Post %d' % post_id

1. dùng để đưa ra user profile cho người dùng khi bạn đăng nhập vào một trang web
2. Hiển thị  mã ID


Xây dựng URL


Để xây dựng nên một Url liên kết với một function , bạn có thể dùng hàm url_for(a,b)
a:tên hàm liên kết
b:một số các keyword arguaments phù hợp với mỗi variable part của Url
Đây là một hàm tuyệt vời

>>> from flask import Flask, url_for
>>> app = Flask(__name__)
>>> @app.route('/')
... def index(): pass
...
>>> @app.route('/login')
... def login(): pass
...
>>> @app.route('/user/<username>')
... def profile(username): pass
...
>>> with app.test_request_context():
...  print url_for('index')
...  print url_for('login')
...  print url_for('login', next='/')
...  print url_for('profile', username='John Doe')
...
/
/login
/login?next=/
/user/John%20Doe


HTTP methods
HTTP method chuyển đến cho server những gì mà khách hàng muốn làm với trang được yêu cầu
GET:
Upload dữ liệu từ webserver đến webclient 
POST:
upload dữ liệu từ webclient đến webserver

Flask giúp chúng ta sử lý các GET questions và POST questions

Ví dụ về GET questions là tạo ra "localhost: 5000" ở đầu
Ví dụ về POST questions là :

from flask import Flask, request
app = Flask(__name__)

@app.route("/", methods=["POST", "GET"])
def index():
    if request.method == "GET":
        return '<html><body><p>Chao ban, ban ten la gi?</p><form action="." method="POST"><input type="text" name="name"/><input type="submit" value="Gui ten"/></form></body></html>'
    elif request.method == "POST":
        return '<html><body><p>ban <strong>%s</strong>! la con cun</p><form action="." method="POST"><input type="text" name="name"/><input type="submit" value="Gui ten"/></form></body></html>' % request.form["name"]
    else:
        return 'Unknown method'



if __name__ == "__main__":
    app.run(host='0.0.0.0')


ở đây:
    tạo ra url http://localhost:5000
    request co the la GET hoach POST
    la GET khi nguoi dung danh url vao browser de load
    la POST khi nguoi dung submit form
    o vi du nay chung ta co form voi mot input la name


Để tạo một text input, bạn dùng tag <INPUT> với attribute TYPE="text". Những gì bạn viết vào ô trống trên đây sẽ là dữ liệu được thu thập
Attribute NAME="name" được dùng để đặt tên cho input, trong đó name là tên do bạn lựa chọn


Static file

Để tạo ra các URL cho các Static file bạn sử dụng cấu trúc:

url_for('static', filename = "style.css")

 Rendering template

một ví dụ nhé:
from flask import Flask, render_template_string
app = Flask(__name__)


@app.route('/')
@app.route('/<name>')
def hello(name='would'):
    return render_template_string('''<!doctype html><title>hello {{name}}!</title><h1>Hello {{name}}, {{name}} dep trai!<h1>''', name= "thanh")

if __name__ == '__main__':
    app.run()

nó sẽ in ra Hello thanh, thanh dep trai :)

Sự tạo ra một HTML trong python không đơn giản, khá khó khăn bởi vì bạn phải làm HTML escaping của bạn để giữ cho application đảm bảo. vì thế Flask configures





Không có nhận xét nào:

Đăng nhận xét