12.4.2 登录
这一节我们来做最经典的登录页面。
首先是登录用的html页面,页面和url模式直接绑定:
from flask import Flask, render_template, request, make_responseapp = Flask(__name__)@app.route('/')def hello_world(): return render_template("index.html")
此函数的功能是:url遇到根地址的时候,返回index.html
第7行代码是标签,说明接下来的函数hello_world是处理url的根目录,第9行代码意思是返回index.html页面。
而index.html必须位于templates文件夹内,如图所示:

事实上所有html文件都要放在此文件夹内。下面是index.html,里面有登录界面:
<!DOCTYPE html><html lang="en"> <head> <meta charset="UTF-8"> <title> Title </title> </head> <body> <form action="/login"> <input type="text" name="username"/> <br/> <input type="password" name="psw"/> <br/> <input type="submit" value="登录"/> </form> </body></html>启动app.py后,访问网站(http://127.0.0.1:5000)就可以看到登录页面

接下来是处理登录,登录页面(index.html)的第10行代码,是form action="/login",这个login是url地址,如果点击登录,那么可以在浏览器地址栏看到127.0.0.1/login,但由于并没有函数处理这个/login,会显示页面不存在。
接下来我们在app.py文件,添加针对/login的处理函数:
from flask import Flask, render_template, request, make_responseimport sqlapp = Flask(__name__)@app .route('/')def hello_world(): return render_template("index.html")
@app .route('/login')def login(): username = request.args.get('username') # 从url里取得参数username的值 password = request.args.get('psw') # 从url里取得参数psw的值 result = sql.find_user(username) # 调用sql.py的find_user函数 print("======================================") print(result) # 如果结果不为空,并且用户名为返回集合的第一个值,密码为返回集合的第二个值 if result is not None and username == result[0] and password == result[1]: response = make_response("登录成功") else: response = make_response("登录失败") return response response = make_response("登录失败") return responsesql.py的文件内容,看数据库模块化
而app.py的login函数,就是来处理/login请求的(也就是上面的http://127.0.0.1/login)
第14、15行代码取出请求中的参数,username和psw的参数名,来自于index.html文件第11和13行代码的name属性(可以修改,但必须前后一致)
第17行代码引用sql.py的find_user函数,根据用户名查询用户,查询到的用户返回给result
19、20行是测试一下查询到的用户
22行登录逻辑:如果用户存在并且密码相等,登录成功,否则登录失败。