1. 程式人生 > >Flask框架基礎

Flask框架基礎

Flask框架基礎

Flask是一個Python編寫的Web 微框架,讓我們可以使用Python語言快速實現一個網站或Web服務。


一.flask基礎緒論

1.安裝flask

pip install flask

2.匯入Flask

from flask import  Flask

3.例項化一個Flask物件

app = Flask(__name__)

4.基本路由:通過路由繫結一個檢視函式

@app.route('/'): 告訴Flask哪個URL才能出發對應的函式, 又稱為路由;

@app.route('/')
def index():
    return  "<h1>hello world</h1>"
    
@app.route('/login/')
def login():
    return  "login"

5.執行Flask應用,可以指定ip和埠

app.run()執行應用,可以加地址也可以不加地址

app.run('0.0.0.0', 9000)

在這裡插入圖片描述
在這裡插入圖片描述

二.路由與變數規則

常見路由的規則
1. url的一部分可以標記為變數<變數名>
2. flask中路由裡面的變數常見型別: int, string, float, path, uuid
from flask import Flask, request

app = Flask(__name__)
# 常見路由的規則
#   1. url的一部分可以標記為變數<變數名>
#   2. flask中路由裡面的變數常見型別:
#           int, string, float, path, uuid

@app.route('/<int:id>/comments/')
def comment1(id):
    return "Comment id: %s" %(id)

@app.route('/welcome/<string:user>/')
def welcome(user):
    app.logger.debug('this is a debug')
    app.logger.warning('this is a warn')
    return user + "使用者, 歡迎來到westos"


# 特殊的url地址: http://www.baidu.com/query?id=123&name=westos
@app.route('/query')
def query():
    # 獲取url地址裡面key值對應的value值;
    id = request.args.get('id')
    name = request.args.get('name')
    return "id: %s, name: %s" %(id, name)


app.run()

在這裡插入圖片描述
在這裡插入圖片描述在這裡插入圖片描述

三.URL構建與反向URL

from flask import Flask, request, url_for

app = Flask(__name__)

@app.route('/welcome/<string:user>/')
def welcome(user):
    return user + "使用者, 歡迎來到westos"


@app.route('/path/')
def path():
    print(request.headers)
    # 檢視預設url地址的請求方法;
    # methods is a list of methods this rule should be limited
    # to (``GET``, ``POST`` etc.).  By default a rule
    # just listens for ``GET``
    print(request.method)
    # url_for: 根據函式名, 反向生成url地址
    print("使用者正在訪問url地址:%s" % (url_for(endpoint="welcome", user="villa")))
    return "使用者正在訪問url地址:%s" % (url_for(endpoint="welcome", user="villa"))
app.run(port=6666)

在這裡插入圖片描述
在這裡插入圖片描述

四.常見http方法之post與get

1.常見HTTP請求方法

GET: 1). 獲取資訊 2). 提交的資訊會展示在url中
POST: 1). 提交資訊, 不在url裡面展示, 有利於資料的安全性

2.預設路由接受的請求方法為____get____

指定接收多個HTTP請求方法:[email protected]('/login/', methods=['GET', 'POST'])

3. 判斷使用者請求的HTTP方法:request.method

4.獲取使用者POST請求提交的表單資料: request.form['user']

5.模板渲染(jinja2)

  • python中生成html不易修改與維護, 所以將html的內容獨立到templates目錄中;
  • 1). 去當前專案目錄下尋找templtes是否存在?再去判斷templates目錄下是否有login.html檔案?
  • 2). 讀取這個login.html檔案的內容, 作為render_template的返回值; ===>render_template('login.html')
  • 3). 最終返回給使用者瀏覽器;

6. 重定向和錯誤

return render_template('login.html', message="使用者名稱或者密碼錯誤")

7. 網路404處理

# 丟擲異常
@app.route('/user/<int:user_id>/')
def user(user_id):
    if 0<int(user_id)<=100:
        return  "歡迎訪問: %s" %(user_id)
    else:
        abort(404)

以上知識點彙總:

from flask import Flask, request, render_template, redirect, url_for, abort

# redirect

app = Flask(__name__)


@app.route('/')
def index():
    return render_template('index.html')


@app.route('/login/', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        print(request.form)
        # 1. 如何獲取到使用者提交的資訊呢?
        user = request.form['user']
        passwd = request.form['passwd']

        # 2. 判斷使用者名稱和密碼是否正確
        if user == 'root' and passwd =='villa':
            # 如果登陸成功, 跳轉到主頁;
            return redirect(url_for('index'))
        else:
            # 如果登陸失敗, 重新登陸;
            return  render_template('login.html', message="使用者名稱或者密碼錯誤")

    else:
        # 使用者是GET請求, 返回登陸的html頁面
        # 1. 讀取login.html檔案的內容
        # 2. 將讀取的內容返回給使用者介面
        return render_template('login.html')

# 404異常處理: 類似於捕獲異常
@app.errorhandler(404)
def not_found(e):
    return  render_template('404.html')
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20181029195453774.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MTE3OTcwOQ==,size_16,color_FFFFFF,t_70)

# 丟擲異常
@app.route('/user/<int:user_id>/')
def user(user_id):
    if 0<int(user_id)<=100:
        return  "歡迎訪問: %s" %(user_id)
    else:
        abort(404)

app.run(port=5002)

在這裡插入圖片描述
(登陸成功之後跳轉至首頁)
在這裡插入圖片描述