gpt4 book ai didi

基本模板上的 Django 表单

转载 作者:行者123 更新时间:2023-12-05 04:15:40 28 4
gpt4 key购买 nike

我正在构建的网站有一个登录表单,作为所有其他模板扩展的 base.html 模板的一部分;因此,我需要以某种方式处理每个页面上的登录/注销逻辑。

目前每个页面都在单独的 View 中加载,那么实现它的最佳和最 DRY 方法是什么?我正在阅读的所有教程都将登录页面分开。

编辑:

我最初的方法是让表单操作始终加载索引并且效果很好,但是我无法将用户重定向回他们登录前所在的位置,这让我很恼火。

之后,我决定将表单重新设计为 Django ModelForm,这样我就可以引发验证错误,而我以前没有设法做到这一点,但现在模板在通过索引 View 呈现时只有 ModelForm 对象,因此输入框甚至不会在其他页面上呈现..

最佳答案

您可以检查模板中的登录表单代码。

您可以将登录模板放在 base_login.html 中并在每个页面上扩展它。

示例基本模板代码:

{% if not user.is_authenticated %}
<form action="{% url my_login_url %}" method="POST">
{% csrf_token %}
<input id="username_field" name="username" type="text" />
<input id="password_field" name="password" type="password" />
<button type="submit">Login</button>
</form>

只有在用户未通过身份验证时才会显示此登录表单。

然后为login 页面编写一个 View 和一个LoginForm 来处理登录过程。

views.py

class LoginView(FormView):

...
your login and redirection logic here
...

表单.py

class LoginForm(forms.Form):

username = ..
password = ..

...
your form validations and other logic
...

因此,无论是任何页面,只有当用户没有登录时才会显示登录表单,并且所有这些登录请求只会转到您的 LoginView。您无需担心处理每个 View 中的登录逻辑。

关于基本模板上的 Django 表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31346836/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com