前后端交互就是在網(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í)間。