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

Django密码生成器页面问题:表单重复提交与同页显示需求

解决方案

针对你遇到的三个问题,以下是具体修改方案:

1. 解决页面刷新重复提交数据问题

采用**Post/Redirect/Get(PRG)**设计模式:处理完POST请求后不直接渲染模板,而是重定向到当前页面。这样刷新页面时只会触发GET请求,不会重复执行数据保存逻辑。

2. 实现同一页面显示输入邮箱与生成密码

在POST请求处理时,将输入的邮箱和生成的密码存入session,重定向后在GET请求中从session取出数据并传递给模板,渲染到对应输入框中。

3. 刷新页面显示空表单及空字段

在GET请求完成数据传递后,清除session中存储的邮箱和密码数据,确保刷新页面时没有遗留数据。


修改后的代码

Views.py

from django.shortcuts import render, redirect
import random
import string
from .models import Item  # 确保导入你的Item模型

def home(request):
    if request.method == 'POST':
        inputemail = request.POST.get('InputEmail')
        gen = ''.join(random.choices(string.ascii_uppercase + string.ascii_lowercase + string.digits + string.punctuation, k=10))
        # 保存数据到数据库
        newpass = Item(email=inputemail, encrypt=gen)
        newpass.save()
        # 将邮箱和密码存入session
        request.session['email'] = inputemail
        request.session['gen_password'] = gen
        # 重定向到当前页面,避免重复提交
        return redirect('home')
    
    # 处理GET请求
    email = request.session.get('email', '')
    gen_password = request.session.get('gen_password', '')
    # 清除session中的数据,确保刷新页面后显示空表单
    if 'email' in request.session:
        del request.session['email']
    if 'gen_password' in request.session:
        del request.session['gen_password']
    
    return render(request, 'home.html', {"email": email, "gen": gen_password})

Home.html

<form method='post' id='pass-form'>
    {% csrf_token %}
    <div class="mb-3">
        <label for="exampleInputEmail1" class="form-label">Email address</label>
        <input type="email" class="form-control" name="InputEmail" value="{{ email }}">
        <div id="emailHelp" class="form-text">We'll never share your email with anyone else.</div>
    </div>
    
    <button type="submit" name="submit" class="btn btn-primary">Generate Password</button><br><br>
</form>

<div class="mb-3">
    <label for="exampleInputPassword1" class="form-label">Generated Password</label>
    <input type="text" id="InputPassword" name="genpassword" value="{{ gen }}" readonly>
</div>

Urls.py(无需修改)

urlpatterns = [
    path('', views.home, name='home'),
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 09:41:19