Python实现注册、登录小程序功能

大致流程如下:

  1. 设计数据库结构:包括用户表和会话表,用户表记录用户的账号信息和登录状态,会话表用来维护用户的登录状态;
  2. 编写Python后端代码:包括注册、登录、验证、登出等接口实现。具体实现过程请参考下面的示例说明;
  3. 编写前端页面:通过HTML、CSS、JavaScript等技术实现一个简单的注册、登录页面。

下面是两个示例:

  1. 示例一:实现注册接口

首先设计用户表结构,包括以下字段: id(primary key), username, password

CREATE TABLE users (
  id SERIAL PRIMARY KEY,
  username VARCHAR(50) UNIQUE NOT NULL,
  password VARCHAR(100) NOT NULL
);

编写Python接口实现注册功能:

from flask import Flask, jsonify, request
from werkzeug.security import generate_password_hash
from flask_sqlalchemy import SQLAlchemy
import random

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://postgres:password@localhost:5432/test'
db = SQLAlchemy(app)

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(50), unique=True, nullable=False)
    password = db.Column(db.String(200), nullable=False)

    def __repr__(self):
        return '<User %r>' % self.username

@app.route('/register', methods=['POST'])
def register():
    data = request.get_json()
    username = data['username']
    password = data['password']
    check_user = User.query.filter_by(username=username).first()
    if check_user:
        return jsonify({'message': 'User already exists'})
    new_user = User(username=username, password=generate_password_hash(password, method='sha256'))
    db.session.add(new_user)
    db.session.commit()
    return jsonify({'message': 'User created successfully'})

上面的代码实现了/register接口,用于处理POST请求,接收username和password两个参数,判断用户是否存在,如果不存在则添加到数据库中,并返回成功信息。

  1. 示例二:实现登录、验证和登出

首先设计会话表结构,包括以下字段: id(primary key), user_id, session_id

CREATE TABLE sessions (
  id SERIAL PRIMARY KEY,
  user_id INTEGER,
  session_id VARCHAR(50) UNIQUE NOT NULL
);

ALTER TABLE sessions
ADD CONSTRAINT fk_user_sessions
FOREIGN KEY (user_id)
REFERENCES users (id);

编写Python接口实现登录接口,其中在验证密码是否正确时需要使用flask-bcrypt库进行密码解密:

from flask import Flask, jsonify, request, session
from werkzeug.security import check_password_hash
from flask_sqlalchemy import SQLAlchemy
from datetime import datetime, timedelta
import uuid
import bcrypt

app = Flask(__name__)
app.secret_key = 'my_secret_key'
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://postgres:password@localhost:5432/test'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(50), unique=True, nullable=False)
    password = db.Column(db.String(200), nullable=False)

    def __repr__(self):
        return '<User %r>' % self.username

class Session(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    session_id = db.Column(db.String(50), unique=True, nullable=False)

    def __repr__(self):
        return '<Session %r>' % self.session_id

@app.route('/login', methods=['POST'])
def login():
    data = request.get_json()
    username = data['username']
    password = data['password']
    user = User.query.filter_by(username=username).first()
    if not user:
        return jsonify({'message': 'Invalid username'})
    if not check_password_hash(user.password, password):
        return jsonify({'message': 'Invalid password'})
    session_id = str(uuid.uuid4())
    db.session.add(Session(user_id=user.id, session_id=session_id))
    db.session.commit()
    session['session_id'] = session_id
    return jsonify({'message': 'Logged in successfully'})

@app.route('/logout', methods=['POST'])
def logout():
    session_id = session['session_id']
    db.session.query(Session).filter_by(session_id=session_id).delete()
    db.session.commit()
    return jsonify({'message': 'Logged out successfully'})

@app.route('/user', methods=['GET'])
def get_user():
    session_id = session['session_id']
    session = Session.query.filter_by(session_id=session_id).first()
    if not session:
        return jsonify({'message': 'Not logged in'})
    user = User.query.get(session.user_id)
    return jsonify({'user': user.username})

上面的代码实现了登录、登出和验证功能。登录时,根据输入的username和password从数据库中获取user对象,如果用户名或者密码不对则返回错误信息,如果验证通过,则生成一个随机的session_id,并将其存储到数据库中和session中。验证接口获取session_id,并从数据库中查询session对象,如果不存在或者查询失败,则认为该用户没有登录,否则从用户对象中获取用户名并返回给客户端。登出时根据session_id从数据库中查询并删除session对象,同时从session中删除session_id。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python实现注册、登录小程序功能 - Python技术站

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

相关文章

  • Python读取mat文件,并保存为pickle格式的方法

    Python中有多种方法用于读取mat文件,并将其转换为pickle格式。下面是一种实现方法的完整攻略: 1. 安装必要的库 在使用Python读取mat文件之前,必须先安装scipy库和pickle库。可以使用以下命令安装这些库: pip install scipy pip install pickle 2. 读取mat文件并转换为Python对象 可以使…

    python 2023年6月2日
    00
  • python双向链表实现实例代码

    当然,我很乐意为您提供“Python双向链表实现实例代码”的完整攻略。以下是详细的步骤和示例: Python双向链表的实现 双向链表是一种常见的数据结构,它可以在O(1)时间内实现插入和删除操作。在Python中,我们可以使用类来实现双向链表。每个节点包含一个值和两个指针,一个指向前一个节点,一个向后一个节点。 1. 定节点类 我们首先定义一个节点类,包含一…

    python 2023年5月13日
    00
  • 什么是python的函数体

    Python 的函数由函数头和函数体两个部分组成。函数头的主要作用是声明函数,包括函数名和函数的参数,函数体是对函数具体实现的描述。 函数体就是函数内代码的具体实现部分,包含在以关键字def开头的代码块中。函数体的代码可以实现函数的具体要求,通过函数名和参数调用函数时,函数体的代码块将被执行。 函数体采用严格的缩进规范进行编写,Python 中使用缩进来标识…

    python 2023年6月5日
    00
  • 实现 Python 脚本生成命令行

    要实现 Python 脚本生成命令行,可以使用 argparse 模块。argparse 可以帮助我们定义命令行参数,并且它可以自动生成帮助和使用文档。 以下是实现 Python 脚本生成命令行的完整攻略: 第一步:导入 argparse 首先需要导入 argparse 模块。 import argparse 第二步:定义参数 接下来,需要定义脚本需要的命令…

    python 2023年6月3日
    00
  • Python:获取文件的数字签名信息

    【问题标题】:Python: Get digital signiture information for a filePython:获取文件的数字签名信息 【发布时间】:2023-04-02 03:02:01 【问题描述】: 我希望利用 Python 创建一个脚本,用于在指定文件安装后检查其数字签名和版权信息。 有人有什么想法吗?我已经尝试使用 win32f…

    Python开发 2023年4月8日
    00
  • 微信小程序搭建自己的Https服务器

    下面是 “微信小程序搭建自己的Https服务器”的完整攻略及示例说明: 一、什么是Https HTTPS 即 HTTP Secure,是服务器与客户端之间进行加密传输的网络通讯协议。通过 HTTPS 进行通信,可以确保数据传输过程中的安全性和完整性。 在 HTTP 协议的基础上增加了 SSL/TLS 协议进行加密传输,HTTPS 使用公钥加密和私钥解密,确保…

    python 2023年6月3日
    00
  • python 画函数曲线示例

    下面是“Python 画函数曲线示例”的完整攻略: 1. 准备工作 在画函数曲线之前,我们需要先安装好matplotlib这个画图库,并引入它: import matplotlib.pyplot as plt 2. 画一条简单的曲线 2.1 编写绘图代码 我们先来画一条简单的函数曲线,比如y = x^2,可以按照以下步骤绘制: 准备x和y数组,定义x为从-1…

    python 2023年6月5日
    00
  • numpy.random.choice()函数详解

    numpy.random.choice()函数详解 numpy.random.choice(a, size=None, replace=True, p=None)函数从指定随机选择元素。 此函数返回给定大小的新数组,其元素来自在没有替换的情况下从输入数组中随机选择的元素。 参数: a: 一维数组或整数,表示可选项。如果是一个整数,则该整数是范围从零到n-1的…

    python 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部