鱼C论坛

 找回密码
 立即注册
查看: 1149|回复: 2

[已解决]web界面登陆错误

[复制链接]
发表于 2023-5-22 10:19:01 | 显示全部楼层 |阅读模式
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信息



最佳答案
2023-5-22 10:19:02
你在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 或 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-22 10:19:02 | 显示全部楼层    本楼为最佳答案   
你在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">登录
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-22 11:13:00 | 显示全部楼层
你在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 模板:
<body>
<form method="post" action="{% url 'login' %}">{% csrf_token %}
    <div class="login">
        <div class="header">登录

</div>
        <div class="container">
            {{ form.username }}
            <span class="left"></span>
            <span class="right"></span>
            <span class="top"></span>
            <span class="bottom"></span>
        </div>
        <div class="container1">
            {{ form.password }}
            <span class="left"></span>
            <span class="right"></span>
            <span class="top"></span>
            <span class="bottom"></span>
        </div>
        <button class="btn" type="submit">登录</button>
    </div>
    {% for error in form.non_field_errors %}
        <div>{{ error|escape }}</div>
    {% endfor %}
</form>
</body>

请注意将  {% url 'login' %}  更改为正确的 URL。如果你在  urls.py  中使用了不同的名称,需要修改这个部分。

希望这些信息对你有所帮助。如果你在实施这些更改时遇到任何问题,或者有其他的问题,欢迎继续提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-27 11:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表