目录
简介:
在本文中,我们将介绍如何使用Python以及其中一个流行的Web框架Flask来编写简单有趣的Web应用程序。
主要介绍了如何使用 Python 和 Flask 框架来构建一个简单的登录网站。该网站具有用户注册、登录等基本功能,使用数组来存储用户信息。用户可以在登录后访问受保护的页面。同时,博客还介绍了如何使用 Jinja2 模板引擎来渲染 HTML 页面,以及如何使用 Flask-WTF 扩展来处理表单数据和验证用户输入。这篇博客旨在帮助初学者了解 Flask 框架的基本用法,并通过实例学习如何构建一个简单但实用的 web 应用程序。
python源代码:
from flask import Flask, render_template, request, redirect, url_for
from flask import Flask, render_template, request, session
app = Flask(__name__)
# 假设已经有一个用户数据库
users = {
"alice": "password1",
"bob": "password2",
"charlie": "password3"
}
# 定义登录页面的路由和方法
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
# 获取表单中提交的用户名和密码
username = request.form['username']
password = request.form['password']
# 检查用户是否存在并且密码是否正确
if username in users and users[username] == password:
# 如果正确,将用户信息保存到 session 中,并重定向到主页
session['username'] = username
return redirect(url_for('index'))
else:
# 如果错误,返回一个错误信息
error = '用户名或密码错误,请重新输入'
return render_template('login.html', error=error)
else:
# 如果是 GET 请求,返回登录页面模板
return render_template('login.html')
# 定义主页的路由和方法
@app.route('/')
def index():
# 检查用户是否已经登录,如果没有则重定向到登录页面
if 'username' not in session:
return redirect(url_for('login'))
# 如果已经登录,显示主页
return render_template('index.html', username=session['username'])
@app.route('/logout', methods=['POST'])
def logout():
session.pop('username', None)
return redirect(url_for('login'))
if __name__ == '__main__':
app.secret_key = 'super_secret_key'
app.run(debug=True)
代码说明:
在这个示例中,我们使用 Flask 提供的 render_template
函数来渲染 HTML 模板,使用 request
对象获取用户提交的表单数据,使用 redirect
和 url_for
函数进行页面重定向,使用 session
对象保存用户信息。需要注意的是,我们需要设置一个 secret_key 来启用 Flask 的 session 功能。你需要在项目根目录下创建一个名为 templates
的文件夹,并在其中创建 login.html
和 index.html
两个 HTML 模板文件,分别用来显示登录页面和主页。
注意:需要在py的同级路径下创建templates文件夹,将该文件夹下创建以下两个html文件。
login页面源码:
<!DOCTYPE html>
<html>
<head>
<title>Login Page</title>
</head>
<body>
<h1>Login</h1>
<form method="POST" action="{{ url_for('login') }}">
<label for="username">Username:</label>
<input type="text" id="username" name="username"><br><br>
<label for="password">Password:</label>
<input type="password" id="password" name="password"><br><br>
<input type="submit" value="Login">
</form>
</body>
</html>
index页面源码:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Index Page</title>
</head>
<body>
<h1>Welcome, {{ username }}!</h1>
<form method="post" action="{{ url_for('logout') }}">
<button type="submit" class="btn btn-primary">退出登录</button>
</form>
</body>
</html>
运行效果如下:
服务端:
web端:
登录:
首页: