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

yizhihongxing

下面是使用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日

相关文章

  • flask中的wtforms使用方法

    下面是有关Flask中使用WTForms的详细攻略。 WTForms简介 WTForms是一个Python第三方库,用于构建Web表单。它为表单字段提供了类型安全、数据验证和呈现模板的便捷方法。WTForms还提供了可扩展的表单字段和验证器,以方便自定义表单实现。 此外,WTForms还具有与Flask框架的集成。因此,在Flask应用程序中使用WTForm…

    Flask 2023年5月16日
    00
  • Python的ORM框架SQLObject入门实例

    Python的ORM框架SQLObject入门实例 SQLObject是一个Python的ORM(Object-Relational Mapping)框架,可以让你像操作对象一样操作数据库。 安装SQLObject 使用pip安装SQLObject: pip install sqlobject 连接数据库 在使用SQLObject之前,需要先建立连接。SQL…

    Flask 2023年5月15日
    00
  • 一文了解Flask框架

    Flask是一款基于Python语言的轻量级Web框架,它的设计目标是简单易用、高效灵活。其核心实现只有约3000行代码,但却支持RESTful请求、Jinja2模板引擎、Werkzeug工具箱等众多功能,适合用于构建小型Web应用、快速原型开发等领域。 Flask框架的核心思想是WSGI(Web Server Gateway Interface),即Web…

    2023年3月13日
    00
  • flask设置cookie

    Flask中设置cookie可以通过make_response函数来实现。下面是具体的步骤: 步骤一:导入Flask和make_response from flask import Flask, make_response 步骤二:创建Flask app并定义路由 这里我们创建了一个hello函数,并将其绑定在URL路径为/的路由中。 app = Flask…

    Flask 2023年5月15日
    00
  • Python flask路由间传递变量实例详解

    下面我来详细讲解一下“Python flask路由间传递变量实例详解”的完整攻略。 一、什么是 Flask 路由 路由是 Web 应用程序中的一个术语,用于指定应用程序如何响应对特定端点的客户机请求。在 Flask 中,路由是与 URL 绑定的响应函数。 下面是一个定义路由的基本语法: @app.route(‘/path/’) def function_na…

    Flask 2023年5月15日
    00
  • python编程Flask框架简单使用教程

    关于“Python编程Flask框架简单使用教程”的完整攻略,我可以提供以下内容: Python编程Flask框架简单使用教程攻略 什么是Flask框架 Flask是一个使用Python编写的Web应用程序框架,它可以轻松构建具有可扩展性的Web应用程序。 如何安装Flask框架 要安装Flask框架,只需要在终端输入以下命令即可: pip install …

    Flask 2023年5月15日
    00
  • 使用Django和Flask获取访问来源referrer

    获取访问来源referrer是一个很有用的功能,它可以让我们查看访问者是从哪个页面跳转而来。在Django和Flask中,获取referrer的方法也是不同的,下面我会分别提供两个完整的攻略来实现这个功能。 Django中获取referrer的方法 Django中获取referrer的方法比较简单,我们直接在视图函数中获取request.META属性中的HT…

    Flask 2023年5月16日
    00
  • Python flask框架定时任务apscheduler应用介绍

    以下是“Python flask框架定时任务apscheduler应用介绍”的详细攻略: Python flask框架定时任务apscheduler应用介绍 简介 Python Flask 是一个轻量级的 Web 应用框架。APScheduler 是一个基于 Python 的定时任务框架。在 Python Flask 框架中使用 APScheduler 可以…

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