python使用Flask操作mysql实现登录功能

下面是使用Flask操作mysql实现登录功能的完整攻略。

1. 安装依赖

首先需要安装Flask和MySQL驱动。可以使用以下命令安装:

pip install flask pymysql

2. 创建数据库

在MySQL中创建一个名为user的数据库,然后在该数据库中创建一个名为user_info的表。

CREATE DATABASE user;
USE user;
CREATE TABLE user_info (
  id INT AUTO_INCREMENT PRIMARY KEY,
  username VARCHAR(20) NOT NULL UNIQUE,
  password VARCHAR(20) NOT NULL
);

3. 创建Flask应用程序

创建一个名为app.py的Python文件,然后编写Flask应用程序。以下是一个简单的示例:

from flask import Flask, request, session, redirect, url_for, render_template
import pymysql

app = Flask(__name__)
app.secret_key = 'your_secret_key'

# MySQL数据库配置
db = pymysql.connect(
  host='localhost',
  user='root',
  password='root',
  db='user',
  cursorclass=pymysql.cursors.DictCursor
)

@app.route('/')
def home():
  return render_template('home.html')

@app.route('/login', methods=['GET', 'POST'])
def login():
  if request.method == 'POST':
    # 获取表单数据
    username = request.form['username']
    password = request.form['password']

    # 查询数据库中是否存在该用户
    with db.cursor() as cursor:
      sql = "SELECT * FROM user_info WHERE username=%s AND password=%s"
      cursor.execute(sql, (username, password))
      user = cursor.fetchone()

    # 如果存在该用户,保存用户信息到session中并跳转到欢迎页面
    if user:
      session['username'] = user['username']
      return redirect(url_for('welcome'))
    else:
      # 用户没有被查询到,显示错误消息
      error = 'Invalid username or password!'
      return render_template('login.html', error=error)

  # GET请求返回登录页面
  return render_template('login.html')

@app.route('/welcome')
def welcome():
  # 检查是否有用户会话
  if 'username' in session:
    username = session['username']
    return f'Welcome, {username}!'
  else:
    return redirect(url_for('login'))

@app.route('/logout')
def logout():
  # 从会话中删除用户的登录信息
  session.pop('username', None)
  return redirect(url_for('home'))

if __name__ == '__main__':
  app.run(debug=True)

4. 创建模板文件

Flask在templates文件夹中查找HTML模板文件。需要创建三个模板文件:home.htmllogin.htmlwelcome.html。这里我们只提供一个简单的home.html示例:

<!DOCTYPE html>
<html>
<head>
  <title>Home</title>
</head>
<body>
  <h1>Welcome to my website!</h1>
  <a href="{{ url_for('login') }}">Login</a>
</body>
</html>

5. 运行程序

在终端中运行Flask应用程序:

python app.py

访问网站首页:http://localhost:5000/,点击登录链接进行登录。

以上为使用Flask操作MySQL实现登录功能的完整攻略。

示例二:

以下是第二个示例:使用SQLAlchemy作为ORM和Flask-Login作为身份验证库实现登录功能。

1. 安装依赖

需要安装以下依赖:

pip install flask flask-login sqlalchemy pymysql

2. 创建数据库

在MySQL中创建一个名为user的数据库,然后在该数据库中创建一个名为user_info的表。

CREATE DATABASE user;
USE user;
CREATE TABLE user_info (
  id INT AUTO_INCREMENT PRIMARY KEY,
  username VARCHAR(20) NOT NULL UNIQUE,
  password VARCHAR(20) NOT NULL
);

3. 创建Flask应用程序

创建一个名为app.py的Python文件,然后编写Flask应用程序。以下是一个简单的示例:

from flask import Flask, request, session, redirect, url_for, render_template
from flask_login import LoginManager, login_user, current_user, logout_user
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from werkzeug.security import generate_password_hash, check_password_hash

app = Flask(__name__)
app.secret_key = 'your_secret_key'

# MySQL数据库配置
engine = create_engine('mysql+pymysql://root:root@localhost/user')
Session = sessionmaker(bind=engine)
Base = declarative_base()

# Flask-Login身份验证
login_manager = LoginManager(app)
login_manager.login_view = 'login'

class User(Base):
  __tablename__ = 'user_info'

  id = Column(Integer, primary_key=True)
  username = Column(String(20), unique=True)
  password = Column(String(128))

  @property
  def is_authenticated(self):
    return True

  @property
  def is_active(self):
    return True

  @property
  def is_anonymous(self):
    return False

  def get_id(self):
    return str(self.id)

@login_manager.user_loader
def load_user(user_id):
  session = Session()
  return session.query(User).get(int(user_id))

@app.route('/')
def home():
  return render_template('home.html')

@app.route('/login', methods=['GET', 'POST'])
def login():
  if request.method == 'POST':
    # 获取表单数据
    username = request.form['username']
    password = request.form['password']

    # 查询数据库中是否存在该用户
    session = Session()
    user = session.query(User).filter_by(username=username).first()

    # 如果存在该用户,验证密码并保存用户信息到session中并跳转到欢迎页面
    if user and check_password_hash(user.password, password):
      login_user(user)
      return redirect(url_for('welcome'))
    else:
      # 用户没有被查询到或密码错误,显示错误消息
      error = 'Invalid username or password!'
      return render_template('login.html', error=error)

  # GET请求返回登录页面
  return render_template('login.html')

@app.route('/register', methods=['GET', 'POST'])
def register():
  if request.method == 'POST':
    # 获取表单数据
    username = request.form['username']
    password = request.form['password']

    # 检查用户名是否已被使用
    session = Session()
    user = session.query(User).filter_by(username=username).first()
    if user:
      error = 'This username is already taken!'
      return render_template('register.html', error=error)

    # 在数据库中创建新用户
    password_hash = generate_password_hash(password)
    new_user = User(username=username, password=password_hash)
    session.add(new_user)
    session.commit()

    # 登录新用户并跳转到欢迎页面
    login_user(new_user)
    return redirect(url_for('welcome'))

  # GET请求返回注册页面
  return render_template('register.html')

@app.route('/welcome')
def welcome():
  # 获取当前用户
  if current_user.is_authenticated:
    username = current_user.username
    return f'Welcome, {username}!'
  else:
    return redirect(url_for('login'))

@app.route('/logout')
def logout():
  logout_user()
  return redirect(url_for('home'))

if __name__ == '__main__':
  Base.metadata.create_all(engine)
  app.run(debug=True)

4. 创建模板文件

Flask在templates文件夹中查找HTML模板文件。需要创建五个模板文件:home.htmllogin.htmlregister.htmlwelcome.htmlbase.html。这里我们只提供一个简单的home.html示例:

{% extends 'base.html' %}

{% block content %}
  <h1>Welcome to my website!</h1>
  <a href="{{ url_for('login') }}">Login</a> or <a href="{{ url_for('register') }}">Register</a>
{% endblock %}

5. 运行程序

在终端中运行Flask应用程序:

python app.py

访问网站首页:http://localhost:5000/,点击登录链接进行登录,点击注册链接进行注册。

以上为使用SQLAlchemy作为ORM和Flask-Login作为身份验证库实现登录功能的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python使用Flask操作mysql实现登录功能 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • Python异步处理返回进度——使用Flask实现进度条

    本文将详细讲解如何使用 Flask 框架实现 Python 异步处理返回进度,并对进度进行可视化展示,以进度条形式向用户展示异步处理的进度。本文将分为两个部分来讲解,第一部分将介绍如何使用 Flask 实现异步处理并返回进度,第二部分将介绍如何使用 JavaScript 和 Bootstrap 实现进度条。 第一部分:Flask 实现异步处理返回进度 1. …

    Flask 2023年5月16日
    00
  • Python Flask入门之模板

    下面是Python Flask入门之模板的完整攻略: 1. 概述 Python Flask是一种轻量级的Web框架,提供了非常简单的方式来构建Web应用程序。在Flask中,模板是用来定义页面布局、数据展示和用户输入的一种方法。通过使用模板,可以在不同的页面中嵌入一些公共的HTML代码、样式等。本文将是一个Python Flask模板入门教程。 2. 准备工…

    Flask 2023年5月15日
    00
  • 新一代Python包管理工具

    这篇文章将为大家介绍新一代Python包管理工具——poetry的完整攻略,主要包括以下内容: 什么是poetry 安装poetry 使用poetry新建Python项目 使用poetry安装项目依赖包 使用poetry打包和发布项目 什么是poetry poetry是一款新一代Python包管理工具,它提供了以下功能: 定义项目的依赖关系 管理项目的虚拟环…

    Flask 2023年5月16日
    00
  • Python的Flask框架中配置多个子域名的方法讲解

    下面我就为您讲解Python的Flask框架中配置多个子域名的方法以及两个示例说明。 配置多个子域名的方法讲解 在Flask中配置多个子域名需要用到Flask中的蓝图(Blueprint)。蓝图是 Flask 中一个很重要的概念,它提供了一种组织 Flask 应用的方式,可以让开发者把应用分成一些比较小的部分。 具体步骤: 首先,我们需要在Flask应用中定…

    Flask 2023年5月16日
    00
  • Flask接口如何返回JSON格式数据自动解析

    当Flask使用JSON格式返回数据时,可自动将JSON转换为Python对象,以便于后续操作。下面是详细的攻略过程: Flask如何返回JSON格式数据 在Flask中使用jsonify函数来返回JSON格式的数据对象,如下所示: from flask import jsonify @app.route(‘/api/data’, methods=[‘POS…

    Flask 2023年5月16日
    00
  • 深度定制Python的Flask框架开发环境的一些技巧总结

    下面是详细讲解“深度定制Python的Flask框架开发环境的一些技巧总结”的攻略: 1. 安装指定版本的Flask框架 首先,在进行Flask框架的开发时,需要安装特定的版本。这可以使用pip来实现,如下所示: pip install Flask==1.1.2 这将安装Flask的1.1.2版本。请注意,版本号需要根据您的项目需求进行更改。 2. 使用虚拟…

    Flask 2023年5月15日
    00
  • Python + Flask 实现简单的验证码系统

    下面是关于“Python + Flask 实现简单的验证码系统”的完整攻略。 简介 验证码是一种用于区分人类用户和计算机程序的图像识别技术。在Web应用程序中,验证码被广泛地应用于注册、登录等需要用户提交信息的场景中,以保证提交表单的用户是真实的人类用户而不是自动化程序。本文将介绍如何使用Python语言和Flask框架实现一个简单的验证码系统。 环境设置 …

    Flask 2023年5月15日
    00
  • python flask框架实现重定向功能示例

    下面我会详细讲解如何使用Python Flask框架实现重定向功能,并提供两条示例说明。 什么是重定向? 重定向是指当用户向一个URL发出请求时,服务器返回一个新的URL地址,表示用户应该跳转到该地址。重定向通常是在必要时将用户引导到其他页面或站点上,并保持他们的请求 URL 的完整性。 Flask中的重定向 Flask中的重定向由redirect函数实现。…

    Flask 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部