|
5鱼币
本帖最后由 tengke 于 2023-5-22 14:47 编辑
html界面数据信息——————————
————————————————————————————————
{% csrf_token %}
<div class="login">
<div class="header">登录</div>
<div class="container">
<input type="username" placeholder="请输入用户名">
<span class="left"></span>
<span class="right"></span>
<span class="top"></span>
<span class="bottom"></span>
<span> {% for error in form.non_field_errors %}
{{ error|escape }}
{% endfor %}</span>
</div>
<div class="container1">
<input type="password" placeholder="请输入密码">
<span class="left"></span>
<span class="right"></span>
<span class="top"></span>
<span class="bottom"></span>
<span> {% for error in form.non_field_errors %}
{{ error|escape }}
{% endfor %}</span>
</div>
<button class="btn" type="submit">登录</button>
</div>
</body>
</html>
————————————————————
py数据信息
from django.shortcuts import render
from django import forms
from app import models
class Logina(forms.Form):
username = forms.CharField(label="用户名",
widget=forms.TextInput)
password = forms.CharField(label="密码",
widget=forms.PasswordInput)
def login(request):
if request.method == "GET":
form = Logina()
return render(request,"dl.html")
form = login(data=request.POST)
if form.is_valid():
cleaned_data = super().clean()
print(cleaned_data)
return render(request, "dl.html")
前台点击登陆按钮不能正常的登陆 后台也没有 post数据 只有get信息
你在Django视图中创建的表单处理方式似乎有一些问题,导致了登录失败。此外,HTML模板中也缺少了一些必要的元素。以下是我建议的修复方式:
**Python 代码部分:**
1. 在处理 POST 请求时,你应该使用你定义的 Logina 表单,而不是 login 。 login 是你的视图函数,而不是一个表单。应该将 form = login(data=request.POST) 更改为 form = Logina(request.POST) 。
2. super().clean() 是在 Django 的 Form 或 ModelForm 的子类中使用的。它并不应该在你的视图函数中使用。如果你希望在表单有效时清洁你的数据,你应该在 Logina 表单类中实现这个方法。
3. 你需要检查用户名和密码是否正确。你可以在 Logina 表单中添加一个 clean 方法来进行这种检查。
4. 你需要处理表单提交。通常,你会将表单放在 <form> 标签中,并设置 action 属性指向处理 POST 请求的视图。
以下是修改后的 Python 代码:
from django.shortcuts import render, redirect
from django import forms
from django.contrib.auth import authenticate, login
class Logina(forms.Form):
username = forms.CharField(label="用户名", widget=forms.TextInput)
password = forms.CharField(label="密码", widget=forms.PasswordInput)
def clean(self):
cleaned_data = super().clean()
username = cleaned_data.get("username")
password = cleaned_data.get("password")
user = authenticate(username=username, password=password)
if user is None:
raise forms.ValidationError("无效的用户名或密码")
return cleaned_data
def login_view(request):
if request.method == "GET":
form = Logina()
return render(request, "dl.html", {'form': form})
else:
form = Logina(request.POST)
if form.is_valid():
username = form.cleaned_data.get("username")
password = form.cleaned_data.get("password")
user = authenticate(username=username, password=password)
if user is not None:
login(request, user)
return redirect('/') # Change this to where you want to redirect after login
return render(request, "dl.html", {'form': form})
注意,我更改了视图名称为 login_view ,以避免与 django.contrib.auth.login 冲突。
**HTML 模板部分:**
1. 你需要一个 <form> 标签来包裹你的输入框和按钮,并设置 action 和 method 属性。
2. 你需要用 Django 的模板标签 {{ }} 来渲染表单。
3. 我注意到你尝试显示非字段错误,但是你在每个输入框下都显示了这些错误。这可能会导致错误消息被重复显示。我建议你只在表单的顶部或底部显示这些错误。
这是修改后的 HTML 模板:
```html
<body>
<form method="post" action="{% url 'login' %}">{% csrf_token %}
<div class="login">
<div class="header">登录
|
最佳答案
查看完整内容
你在Django视图中创建的表单处理方式似乎有一些问题,导致了登录失败。此外,HTML模板中也缺少了一些必要的元素。以下是我建议的修复方式:
**Python 代码部分:**
1. 在处理 POST 请求时,你应该使用你定义的 Logina 表单,而不是 login 。 login 是你的视图函数,而不是一个表单。应该将 form = login(data=request.POST) 更改为 form = Logina(request.POST) 。
2. super().clean() 是在 Django 的 Form 或 ...
|