12.4.2 登录

这一节我们来做最经典的登录页面。
首先是登录用的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行代码,是form action="/login",这个login是url地址,如果点击登录,那么可以在浏览器地址栏看到127.0.0.1/login,但由于并没有函数处理这个/login,会显示页面不存在。
接下来我们在app.py文件,添加针对/login的处理函数:
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')  # 从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 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行登录逻辑:如果用户存在并且密码相等,登录成功,否则登录失败。