1. 程式人生 > 實用技巧 >python flask 入門

python flask 入門

1、入門案例。本質上還是一個socket

from flask import Flask,request
#### 
app=Flask(__name__)
app.debug=True

####配置路由
@app.route('/')
def login():
    return "hello world"

####設定監聽埠號 if __name__=='__main__': app.run(host='127.0.0.1', port=8080) app.config['Debug'] = True

2、flask 底層呼叫了wsgi 和 jinja2 煊染模板(html)。接受資料方式有post 和 get 方式。render_template負責返回

from __init__ import app
from flask import request    ### 和之前用到的不一致
from  flask import render_template
from model.modelapi import main_version



@app.route('/login',methods=['GET', 'POST'])
def fun_login():
    user = {'nickname': 'Miguel'}  # fake user
    if request.method=='GET':   ####get 提交獲取的資料方式
       # data 
= request.args.to_dict() # post request.json ,request.args name = request.args.get("name") age = request.args.get("age") # print(name) return render_template("login.html", user=user) elif request.method=='POST': ## post提交使用form 接受資料 data =request.form.to_dict() # name
=data['username'] passwd = data['passwd'] print(name) print(passwd) if name =='admin' and passwd=='123456': return render_template("query.html", user=name) else: return render_template("login.html", user=user) else: return "不支援的請求方法"

3、flask jinja2 可以接收變數、字典,也可以使用迴圈 user={'nickname':"tests"}l

在html 中 變數使用{{ user }} 也可以使用if 等判斷語句.

{ % if statement %} 結束條件為 {% endif%},

render_template("login.html", user=user)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    {% if  user.nickname %}
    <title>{{user.nickname}}</title>
    {% else  %}
     <title>Welcome to xiajinqi</title>  #如果沒有傳入引數,則顯示welcome to microblog
    {% endif %}

</head>
<body>
    <form action="http://127.0.0.1:8080/login" method="post">
        使用者名稱:<input type="text" name="username"> <br>
        密碼:<input type="password" name="passwd"> <br>
        <input type="submit" value="提交">
    </form>
</body>
</html>

3、fjinja2 中for 迴圈

列表:{% for i in list %} html {% endfor %}

字典:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <table border="1">
  <tr><th>版本號</th></tr>
    {% for  i  in  resutl %}
        <tr><td>{{ i }}</td></tr>
    {% endfor %}


</table>
</body>
</html>
{% for key, value in my_dict.iteritems() %}
<dt>{{ key|e }}</dt>
<dd>{{ value|e }}</dd>
{% endfor %}

參考文件:https://www.cnblogs.com/yanzi-meng/p/8342798.html

4、flask MTV 分層的原理

建立flask架構以後,會自動生成一個templates 檔案。手工建立view(路由和函式) model(連線資料庫等其他等)

新建一個__init__.py :

from flask import Flask
### 使用Flask架構
app = Flask(__name__)
app.debug='True'

#### 引用view 也就是路由函式 將路由 資訊遷移到views
from view.view import *   ###第一個view 為view包。第二個view 是view.py


####   ##將啟動的埠服務遷移到harbor.py
##if __name__ == '__main__':
##   __init__.app.run(host='127.0.0.1',port=8081)

harbor.py 需要引用同級別檔案 中的某個變數 from 檔名 import 變數名字或者函式名字類名

from  __init__ import app

if __name__ == '__main__':
    app.run(host='127.0.0.1',port=8080)view

view 也需要引用app.引用第一級別檔案直接引用即可。引用同目錄下的檔案。包名.檔名即可

from __init__ import app
from flask import request
from  flask import render_template
from model.modelapi import main_version



@app.route('/login',methods=['GET', 'POST'])
def fun_login():
    user = {'nickname': 'Miguel'}  # fake user
    if request.method=='GET':
       # data = request.args.to_dict()  # post request.json     ,request.args
        name = request.args.get("name")
        age = request.args.get("age")
        # print(name)
        return render_template("login.html", user=user)
    elif request.method=='POST':
         data =request.form.to_dict() #
         name =data['username']
         passwd = data['passwd']
         print(name)
         print(passwd)
         if name =='admin' and  passwd=='123456':
             return render_template("query.html", user=name)

至此我們實現了MTV分離