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

yizhihongxing

大致流程如下:

  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实现LRU算法

    下面是关于“Python实现LRU算法”的完整攻略。 1. 什么是LRU算法 LRU(Least Recently Used)算法是一种常用的缓存淘汰算法,它的基本思是将最近最少使用的缓存块淘汰掉,以便为新的缓存块腾出空间。在Python中,我们可以使用字典双向链表来实现LRU算法。 2. Python实现LRU算法 下面是使用Python实现LRU算法的整…

    python 2023年5月13日
    00
  • python中的&&及||的实现示例

    下面是Python中的&&及||的实现示例的完整攻略: 1. 逻辑与操作&& 在Python中,逻辑与的操作符是and。其实现方式是短路求值(short-circuit evaluation)。简单来说,就是当第一个表达式为False时,不再执行后面的表达式。下面是一个示例: a = 5 b = 10 c = 15 if a …

    python 2023年5月19日
    00
  • python实现简单爬虫功能的示例

    下面是关于“python实现简单爬虫功能的示例”的完整攻略。 简介 爬虫是一种自动采集互联网数据的技术,它可以模拟人的操作,在互联网上寻找相关信息并进行整理分析。而Python作为一种快速、简单、易上手的编程语言,为爬虫功能提供了很多支持。在这里,我们将介绍如何使用Python实现简单的爬虫功能。 1. 准备工作 在开始之前,我们需要安装两个Python库:…

    python 2023年5月14日
    00
  • Python使用draw类绘制图形示例讲解

    Python使用draw类绘制图形示例讲解 在Python的turtle库中,我们可以使用draw类来绘制各种形状的图形。这里给出一个完整的攻略,讲解如何使用draw类来绘制图形。 基本用法 draw类是turtle库中的一个子类,用来绘制图形。可以通过以下代码导入draw类: from turtle import Screen, Turtle, draw …

    python 2023年5月18日
    00
  • Python制作简单的网页爬虫

    下面我来详细讲解一下Python制作简单的网页爬虫的完整攻略。 步骤一:准备工作 在开始编写网页爬虫之前,我们需要进行一些准备工作。 安装Python:我们需要先安装Python环境,推荐使用Python3以上版本。 安装爬虫库:Python有很多爬虫库,比如requests、BeautifulSoup、Scrapy等,需要根据需要选择合适的进行安装和使用。…

    python 2023年5月14日
    00
  • Python安装Bs4的多种方法

    安装Bs4的多种方法,我这里介绍3种常用的方法。 方法一:使用pip安装 打开终端或者命令行窗口(Windows用户可以使用cmd或PowerShell)。 输入以下命令并按回车: pip install beautifulsoup4 等待Bs4安装完毕即可。 方法二:使用easy_install安装 安装easy_install。easy_install是…

    python 2023年5月14日
    00
  • 用于大型 HTML/XML 的 Python 模板

    【问题标题】:Python templates for huge HTML/XML用于大型 HTML/XML 的 Python 模板 【发布时间】:2023-04-04 12:23:01 【问题描述】: 最近我需要生成一个巨大的 HTML 页面,其中包含一个包含数千行表格的报告。而且,显然,我不想在内存中构建整个 HTML(或底层树)。结果,我用旧的好字符串…

    Python开发 2023年4月6日
    00
  • python清除字符串里非数字字符的方法

    Python中可以使用re模块的正则表达式来清除字符串中的非数字字符,下面是详细的步骤和示例说明: 步骤 导入re模块 使用re.sub()方法匹配并替换非数字字符 可选:将字符串转换为数字类型,例如整数int或浮点数float 示例1:清除字符串中的非数字字符 import re str1 = "4y2h3y49yj12" str1 =…

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