通过一个简单的程序来理解:
唯一要讲的就是login函数,进行error判断以及用户名和密码登录的判别:
1.当登录失败的时候,定义错误,并且再次跳转到登录的页面,返回错误。
2.用户没有在页面中输入,导致请求方法为GET的时候,定义错误,再登录页面中返回错误。
3.当登录成功的时候,返回到主页,并且出现一个消息闪现。
from flask import Flask, flash, redirect, render_template,request, url_for app = Flask(__name__) app.secret_key = 'some_secret' @app.route('/') def index(): return render_template('index_1.html') #搞一个登录页面,页面显示,如果是登录正确,那么跳转首页,并闪现信息显示正确,不然再跳到登录页面,返回错误 @app.route('/login', methods=['GET', 'POST']) def login(): error = None #如果请求的方法是POST if request.method == 'POST': #如果没有错误的话,那么错误返回的None,如果错的话那么就返回下列代码中的错误 #当登录失败的时候,就会生成新的error错误 if request.form['username'] != 'admin' or request.form['password'] != 'secret': error = 'Invalid credentials' else: #当登录成功的时候消息闪现 flash('You were successfully logged in') return redirect(url_for('/index')) #如果请求方式是GET和账户密码错误的时候。那么返回login.html,并且提示错误,就是用户名和密码全部没输入 return render_template('login_1.html', error=error) if __name__ == "__main__": app.run()
layout.html:
首先是创建一个基模板,基模板的主要内容是消息闪现,并且设置一个大的html框架。
在这个基模板中,主要设置了一个共享的消息闪现的代码,然后设置了一个主要的body块,让子模板继承。
<!doctype html>
<title>My Application</title>
{% with messages = get_flashed_messages() %}
{% if messages %}
<ul class=flashes>
{% for message in messages %}
<li>{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
{% endwith %}
{% block body %}{% endblock %}
index_1.html:
在首页模板index_1.html中设置跳转到登录页面,继承基模板的body块,并且有了基模板消息闪现的特性,在body块中设置跳转页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% extends "layout.html" %}
{% block body %}
<h1>Overview</h1>
<p>Do you want to <a href="{{ url_for('login') }}">log in?</a>
{% endblock %}
</body>
</html>
login_1.html:
如果登录的过程中,出现了错误那么在登录页面中返回错误,并且再次跳转到登录页面,返回错误。
如果在登录的过程总,没有出现错误那么在登录页面中直接跳转到首页中,这时候会返回到首页中并且出现一个消息闪现。
{% extends "layout.html" %}
{% block body %}
<h1>Login</h1>
{% if error %}
<p class=error><strong>Error:</strong> {{ error }}
{% endif %}
<form action="" method=post>
<dl>
<dt>Username:
<dd><input type=text name=username value="{{request.form.username }}">
<dt>Password:
<dd><input type=password name=password>
</dl>
<p><input type=submit value=Login></p>
</form>
{% endblock %}