[英]Need to get the output in the same page (using django model forms with ajax)
[英]Need to show result on the same page - Django
我正在創建一個密碼生成器應用程序。 該應用程序正在運行並將值存儲在數據庫中。
問題是每當我刷新時,表單都會重新提交並采用以前的值並存儲。
另外,我想在同一頁面上顯示 email 和密碼。
每當我刷新時,我都想顯示一個帶有空字段的空表單。
視圖.py
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()
return render(request,'home.html',{"gen":gen})
return render(request,'home.html',{})
家.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" >
<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}} >
</div>
網址.py
urlpatterns = [
path('',views.home,name='home'),
]
根據文檔:
在成功處理 POST 數據后,你應該總是返回一個 HttpResponseRedirect。 此提示並非特定於 Django; 總的來說這是很好的 web 開發實踐。
所以你應該制作另一個頁面來顯示生成的密碼,它將采用在home
視圖中創建的Item
model 的提交實例 ID,因此:
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()
return redirect('success', args=(newpass.pk))
return render(request,'home.html',{})
def success(request, pk):
item_obj = get_object_or_404(Item, pk=pk)
return render(request,'success.html', {'gen':item_obj.encrypt})
網址.py
urlpatterns=[
path('',views.home,name='home'),
path('success/<int:pk>/',views.success,name='success')
]
成功.html
<body>
<h2>The form is successfully submitted.</h2>
<br>
<div class="mb-3">
<label for="exampleInputPassword1" class="form-label">Generated Password</label>
<input type="text" id="InputPassword" name="genpassword" value={{gen}} >
</div>
<a href="{% url 'home' %}"> Again go to password generator page.</a>
</body>
您可以在required
表單中創建 email 字段,然后在使用 Javascript 的submit
事件提交表單后硬刷新頁面,因此模板:
<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" required>
<div id="emailHelp" class="form-text">We'll never share your email with anyone else.</div>
</div>
<button type="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}} >
</div>
<script type='text/javascript'>
let form = document.getElementById('pass-form');
addEventListener('submit', (event) => {
location.reload(true); // hard refreshed
console.log('hard refreshed')
});
</script>
注意:然后還有某些瀏覽器,如 Microsoft Edge,會彈出 他們在其中提到您正在查找的頁面使用了您輸入的信息。 返回頁面可能會觸發您在那里執行的任何操作的重復。 你要繼續嗎?
當你點擊繼續時,它會創建重復的記錄,所以我認為正如文檔提到的第一種方法更好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.