Flask框架學(xué)習(xí)之前后端交互(一)

前后端交互就是在網(wǎng)頁上點(diǎn)擊一個(gè)按鈕或者是提交一個(gè)表單,怎么傳到后端,后端怎么傳到數(shù)據(jù)庫里,又怎么返回?cái)?shù)據(jù)到前端的問題。
這里簡單分為以下幾類:

1.前端提交表單數(shù)據(jù)傳給后端,后端接收返回一個(gè)新頁面。

舉一個(gè)登陸界面的簡單例子,前端輸入賬號(hào)密碼,后端從數(shù)據(jù)庫取出數(shù)據(jù)進(jìn)行比對(duì),如果一致則轉(zhuǎn)向主頁面,不一致則返回當(dāng)前頁面。
html代碼:

<form class="form-4" action="/main/" method="post">

                    <h1>Login</h1>
                    <p>
                        <label for="login">Username or email</label>
                        <input type="text" name="login" placeholder="NameId" required>
                    </p>
                    <p>
                        <label for="password">Password</label>
                        <input type="password" name='password' placeholder="Password" required> 
                    </p>
                    <p>
                        <input type="submit" name="submit" value="登陸" >
                    </p>       
</form>?

兩個(gè)輸入框,賬號(hào)和密碼,和一個(gè)提交的按鈕。
在form標(biāo)簽里面以post方式進(jìn)行提交,action里面的就是你點(diǎn)擊按鈕的時(shí)候要跳轉(zhuǎn)到的url,這時(shí)候我們就要在app.py里面來定義這個(gè)路由了。

后端代碼:

@app.route('/main/', methods=['post'])
def yanzheng():
    nameid = request.form['login']
    ps = request.form['password']

    conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='123', db='ci', charset='utf8')
    cur = conn.cursor()
    sql = "SELECT `name`, `password` FROM `information` WHERE name_id =" + nameid
    cur.execute(sql)
    realps = cur.fetchall()
    conn.close()

    session.permanent = True  # 默認(rèn)session的時(shí)間持續(xù)31天
    session['name_id'] = nameid
    session['name_name'] = realps[0][0]
    if ps == realps[0][1] :
        return render_template('index.html')
    else:
        return render_template('login.html')

說明:
1.第一行單引號(hào)里面的 /main/ 這個(gè)路由和你上面html里面action里面一致,方法是post.

2.函數(shù)名隨便取,不過不要像我這樣不規(guī)范。

3.之后的2行是從form表單里接受的數(shù)據(jù),中括號(hào)里面的login,password是html標(biāo)簽里的name屬性。

4.之后的6行是連接數(shù)據(jù)庫,根據(jù)name_id 從本地的 ci數(shù)據(jù)庫的 information表中取出來 name 和 password兩項(xiàng),把值給realps這個(gè)元祖里面。此時(shí)realps=(('zhangsan','123'),)是一個(gè)二元數(shù)組。

5.由于登陸一般都需要開啟會(huì)話session,簡言之就是需要設(shè)置全局變量,

session['name_id'] = nameid
session['name_name'] = realps[0][0]

這就把這里接收到的nameid和數(shù)據(jù)庫中取出的'zhangsan'設(shè)置成了全局變量,在其他@app.route()里面以如下方式調(diào)用全局變量:

@app.route('/sign_in',  methods=['post'])
def sign_in():
    name = session.get('name_name')
    name_id = session.get('name_id')

6.最后就是判斷了,如果密碼相等,就轉(zhuǎn)向主頁面,如果不相等則返回登陸頁面。

7.需要至少引入以下模塊(應(yīng)該不用這么多,記不清了,不過其他地方應(yīng)該能用到......):

from flask import Flask,render_template,request,session
import pymysql
import time
import json
import os
from datetime import timedelta
import datetime

app = Flask(__name__)
app.config['SECRET_KEY'] = os.urandom(24)
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=1)  # 設(shè)置session的保存時(shí)間。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容