如果我使用操作属性,Django 表单不保存



对于上下文,这里是 view.py

from .forms import SignIn
...
def sign_in_view(request, *args, **kwargs):
form = SignIn(request.POST or None)
if form.is_valid():
form.save()
form = SignIn(request.POST or None)
context = {
'form': form
}
return render(request, "accounts/sign_in.html", context)

这是 accounts/sign_in.html 的 HTML 文件

{% extends "accounts/base.html" %}
{% block title %}
<title>Log-in</title>
{% endblock %}
{% block content %}
<h1 align="center">Sign in</h1>
<hr/>
<form method="POST" action="http://127.0.0.1:8000/home/">  # currently in localhost
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Sign in">
</form>
{% endblock content %}

accounts/sign_in.html 年我的表单标签中没有属性 action="http://127.0.0.1:8000/home/",我设法通过在浏览器上键入所需的参数来成功地将用户添加到数据库中。

但是,使用属性 action="http://127.0.0.1:8000/home/",我被重定向到 URL,但是当我在/admin/中检查数据库时,我无法在那里看到用户。

我不知道表单是否没有保存,或者我刚刚犯了一些愚蠢的错误。

谢谢。

操作属性不适用于发送表单后的重定向。它应该是附加到负责处理窗体的视图的 URL。您的sign_in_view网址是什么?如果是例如/sign-in/,那应该是操作属性的值。如果要在登录后重定向用户,请在sign_in_view中执行此操作:

if form.is_valid():
...
return redirect('/home/')

这是 Django 文档的链接,其中包含有关表单的所有有用信息: https://docs.djangoproject.com/en/3.0/topics/forms/

这是用户注册的更好方式。

view.py

def sign_in_view(request):
form = SignIn(request.POST or None)
if form.is_valid():
user = form.save()
username = form.cleaned_data.get('username')
password = form.cleaned_data.get('password')
user = authenticate(request, username=username, password=password)

if user is not None:
login(request, user)
return redirect('/')

context = {
'form': form
}
return render(request, "accounts/sign_in.html", context)

比在你的模板中你可以做到这一点

{% extends "accounts/base.html" %}
{% block title %}
<title>Log-in</title>
{% endblock %}
{% block content %}
<h1 align="center">Sign in</h1>
<hr/>
<form method="POST" action="">  # currently in localhost
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Sign in">
</form>
{% endblock content %}

最新更新