You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Flask中实现点击Submit按钮生成新的随机密码?

问题与解决方案

问题

在Flask结合HTML的项目中,希望点击「Generate New Password」按钮时,页面显示新的随机密码。尝试将Flask中的password设为空字符串,期望每次点击时重置,但无法生成新密码。

问题分析

  1. 密码生成函数逻辑错误:gen.py的main函数存在未定义变量(password未声明却直接调用),逻辑混乱导致无法生成有效密码或运行报错。
  2. 路由与表单配合问题:HTML中存在两个独立表单,提交按钮的请求未正确关联密码渲染逻辑;原result路由虽调用main(),但密码生成函数本身故障导致无有效输出。
  3. 变量混淆:main函数内定义了pword但未正确使用,逻辑冗余绕弯,进一步导致密码生成失败。

修复后的代码

1. Flask 路由文件(views.py)

from flask import Blueprint, render_template
from gen import main

views = Blueprint(__name__, 'views')

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

@views.route('/generator')
def generator():
    # 初始加载时不显示密码
    return render_template('index.html', password='')

@views.route("/result", methods=['GET', 'POST'])
def result():
    # 每次请求都生成新密码
    new_password = main()
    return render_template("index.html", password=new_password)

2. 密码生成函数(gen.py)

import random
import string

def main():
    # 定义密码包含的字符集:字母+数字+符号
    letters = string.ascii_letters
    numbers = string.digits
    symbols = string.punctuation
    all_chars = letters + numbers + symbols

    # 生成20-40之间的随机密码长度
    password_length = random.randint(20, 40)
    # 随机选择字符拼接成密码
    password = ''.join(random.choice(all_chars) for _ in range(password_length))
    return password

注:简化了原代码的冗余逻辑,改用string模块提供的标准字符集,避免自定义函数的错误,同时保证密码的随机性和复杂度。

3. HTML模板(index.html)

<html>
<head>
    <title>Generated Password</title>
</head>
<body>
    <center>
        {% if password %}
        <h3 style="color: rgb(216, 44, 216)">Your password is {{ password }}</h3>
        {% endif %}
        
        <!-- 单个表单处理提交请求,简化结构 -->
        <form action="/result" method="GET">
            <input type="Submit" class="file_submit" value="Generate New Password">
        </form>
    </center>
</body>
</html>

功能说明

每次点击「Generate New Password」按钮时,请求会触发/result路由,路由调用main()生成新密码,再传递给模板渲染,实现点击即更新密码的效果。

内容的提问来源于stack exchange,提问作者ebtmaster

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 16:22:45