使用python的flask编写一个登录注册的页面,且携带轻量化数据库sqlite
Flask是一个轻量级的Python Web框架,它可以帮助开发者快速搭建Web应用程序。Flask的设计目的是保持简单和灵活,同时提供必要的功能以构建Web应用。它被广泛用于构建基于RESTful API的后端服务、网站和博客等应用。Flask提供了很多扩展库和工具,支持与各种数据库进行交互,同时也支持自定义插件或中间件的开发。与Django相比,Flask更加轻量级,更适合小型Web应用或API的开发。
先简单来一个flask例子
from flask import Flask, render_template
app = app = Flask(__name__)
@app.route("/home",methods="GET")
def home():
render_template("index.html")
不了解的可以查看
https://blog.csdn.net/asd529735325/article/details/103011940
,其中详细的介绍了flask的环境部署与搭建
接下来开始我们的登录注册页面。
import sqlite3
import re
from flask import session, request, render_template, redirect, url_for, g, Blueprint
from flask_bcrypt import generate_password_hash
首先先使用sqlite创建数据库将用户的数据放入sqlite
create_table_sql = '''
CREATE TABLE IF NOT EXISTS user (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username VARCHAR(40) UNIQUE NOT NULL,
password VARCHAR(120) NOT NULL,
);
'''
为了使应用在上下文中初始化数据库的连接:
DATABASE = '数据库的名'
def get_db():
db = gettar(g,'_database',None)
if db is None:
db = g._database = sqilte3.connect(DATABASE)
return db
接下来编写注册页面来添加用户到sqlite中
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>注册账户</title>
</head>
<body>
<form action="{{ url_for('user.register') }}" method="post">
<h1>注册账户</h1>
<label for="username">用户名:</label>
<input type="text" id="username" name="username" required />
<label for="password">密码:</label>
<input type="password" id="password" name="password" required />
<label for="birthdate">出生年月日:</label>
<input type="date" id="birthdate" name="birthdate" required /><br>
<input type="submit" value="注册" />
{% if error %}
<p class="error">{{ error }}</p>
{% endif %}
<p>已有账户?<a href="{{ url_for('user.login') }}">立即登录</a></p>
{{x}}
</form>
</body>
</html>
这是一个简便的html文件
@appp.route('/register', methods=['GET', 'POST'], endpoint='register')
def register():
if request.method == 'POST':
username = request.form.get('username')
password = request.form.get('password')
birthdate = request.form.get('birthdate')
# 密码强度校验
if not re.search(r'[a-z]', password) or not re.search(r'[A-Z]', password) or not re.search(r'[0-9]', password):
return '密码必须包含大小写字母和数字'
hashed_password = generate_password_hash(password, 12)
# 添加用户数据
db = get_db()
try:
insert_user_sql = '''
INSERT INTO user (username, password, birthdate)
VALUES (?, ?, ?);
'''
db.execute(insert_user_sql, (username, password, birthdate))
db.commit()
x = f'{username}注册成功'
except:
db.rollback()
error = '注册失败,请检查用户是否已经存在'
return render_template('register.html',error=error)
return render_template('login.html', x=x)
else:
return render_template('register.html')
然后是登录界面
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登录</title>
</head>
<body>
{% if error %}
<p>{{ error }}</p>
{% endif %}
<form method="POST" action="{{ url_for('login') }}">
<label>用户名:</label>
<input type="text" name="username"><br>
<label>密码:</label>
<input type="password" name="password"><br>
<input type="hidden" name="hashed_password" value="{{ hashed_password }}">
<input type="submit" value="登录">
<div style="text-align: center; margin-top: 10px;">
<small>如果没有账户,点此<a href="{{url_for('user.register')}}">注册</a></small>
</div>
</form>
</body>
</html>
这是一个简单的登录html文件
# 登录函数,用来验证用户身份
@app.route('/login', methods=['GET', 'POST'], endpoint='login')
def login():
if request.method == 'POST':
username = request.form.get('username')
password = request.form.get('password')
# 查询用户数据
query_user_sql = '''
SELECT COUNT(*)
FROM user
WHERE username = ?
AND password = ?
'''
db = get_db()
result = db.execute(query_user_sql, (username, password)).fetchone()
count = result[0]
# 返回验证结果
if count == 0:
return redirect(url_for('user.register'))
elif count == 1:
session['username'] = username
return render_template('home.html')
else:
return render_template('login.html', error='用户名或密码错误')
else:
return render_template('login.html')
@app.route('/', endpoint='home_page')
def home():
# 获取当前登录用户的用户名
username = session.get("username")
if username:
# 如果用户已登录,则渲染主页模板,并传递用户名参数
return render_template("home.html", username=username)
else:
# 如果用户未登录,则重定向到登录页面
return redirect("/login")
@app.route("/logout", endpoint='logout')
def logout():
# 删除 Session 中保存的用户名
session.pop("username", None)
# 重定向到登录页面
return redirect("/login")
登录完成后,应该关闭数据库的连接来保护数据库的安全
# 关闭数据库连接
@user_bp.teardown_request
def close_connection(exception):
db = getattr(g, '_database', None)
if db is not None:
db.close()
第一次写自己的文章,有何不妥,请大家指出问题,一起改善
谢谢!
版权声明:本文为m0_73421142原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。