11.4.1 登录

这一节我们来做最经典的登录页面。
首先是登录用的html页面,页面和url模式直接绑定:
from flask import Flask, render_template, request, make_response
app = 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行代码,是formaction="/login",这个login是url地址,如果点击登录,那么可以在浏览器地址栏看到127.0.0.1/login,但由于并没有函数处理这个/login,会显示页面不存在。
接下来我们在app.py文件,添加下面的函数:
from flask import Flask, render_template, request, make_response
import sql
app = Flask(__name__)
@app.route('/')
def hello_world():
    return render_template("index.html")
@app.route('/login')
def login():
    username = request.args.get('username')
    password = request.args.get('psw')
    result = sql.find_user(username)
    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
sql.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行登录逻辑:如果用户存在并且密码相等,登录成功,否则登录失败。