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
相关产品推荐
相关产品推荐

