使用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中

注册账户

注册账户


{% if error %}

{{ error }}

{% endif %}

已有账户?立即登录

{{x}}

 这是一个简便的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')

然后是登录界面

登录

{% if error %}

{{ error }}

{% endif %}



如果没有账户,点此注册

 这是一个简单的登录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()

第一次写自己的文章,有何不妥,请大家指出问题,一起改善

谢谢!

好文阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: