pkchenwang 2024-07-08 14:39 采纳率: 0%
浏览 5

django登录页面无法登录

做了个登陆页面,用指定用户名和密码登录发现并不能实现页面跳转,以下是代码
views.py

from django.shortcuts import render, HttpResponse, redirect
from django.http import JsonResponse
from django import forms
from app01 import models
import datetime
from django.utils.safestring import mark_safe
from django.contrib.auth import authenticate, login, logout
from .forms import CustomLoginForm
from django.contrib import messages
from django.contrib.auth.models import User

def login_view(request):

    HARDCODED_USERNAME = '123'
    HARDCODED_PASSWORD = '123'

    if request.method == 'POST':
        form = CustomLoginForm(request, data=request.POST)
        if form.is_valid():
            username = form.cleaned_data['username']
            password = form.cleaned_data['password']

            if username == HARDCODED_USERNAME and password == HARDCODED_PASSWORD:
                user = authenticate(username=username,password=password)

                if user is not None:
                    login(request, user)
                    return redirect('lib/list')  # 重定向到首页或其他页面
                else:
                    messages.error(request, '用户名或密码错误')
            else:
                messages.error(request, '用户名或密码错误')
        else:
            messages.error(request, '用户名或密码错误')
    else:
        form = CustomLoginForm()
    return render(request, 'login.html', {'form': form})

forms.py代码

from django import forms
from django.contrib.auth.forms import AuthenticationForm

class CustomLoginForm(AuthenticationForm):
    username = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Username'}))
    password = forms.CharField(widget=forms.PasswordInput(attrs={'class': 'form-control', 'placeholder': 'Password'}))

urls.py代码如下


from django.urls import path
from app01 import views


app_name = 'app01'
urlpatterns = [
    # path('admin/', admin.site.urls),
    path(r'', views.home),
    path(r'login/', views.login_view,name='login'),
    path(r'lib/list/', views.lib_list),
    path(r'lib/list/<int:nid>/borrow/', views.lib_borrow),
    path(r'lib/return/', views.lib_return),
    path(r'phone/list/', views.phone_list),
    path(r'phone/list/<int:nid>/borrow/', views.phone_borrow),
    path(r'phone/return/', views.phone_return),
    path(r'phone/info/<int:pk>/', views.phoneinfo_detail, name='phoneinfo_detail'),

login.html代码如下

{%load static %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>哈曼系统测试资产管理系统</title>
    <style>
        /* 其他样式保持不变 */
        body {
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            margin: 0;
            background-color: #f7f7f7;
        }
        .login-container {
            border-radius: 8px;
            box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1);
            background: #fff;
            max-width: 320px; /* 限制最大宽度 */
            width: 100%; /* 宽度设为100%,但不超过最大宽度 */
            padding: 20px;
        }
        .login-form h2 {
            margin-bottom: 20px;
            text-align: center;
            color: #333;
        }
        .form-group {
            margin-bottom: 15px;
        }
        .form-group label {
            display: block;
            margin-bottom: 5px;
        }
        .form-group input {
            width: 100%; /* 输入框宽度充满 */
            max-width: 300px; /* 限制输入框最大宽度 */
            padding: 8px;
            border: 1px solid #ddd;
            border-radius: 4px;
        }
        .login-form button {
            width: 20%;
            padding: 10px;
            margin-top: 15px;
            border: none;
            border-radius: 5px;
            background-color: #007bff; /* 蓝色背景 */
            color: white;
            font-size: 16px;
            cursor: pointer;
        }
        .login-form button:hover {
            background-color: #0056b3; /* 蓝色背景的悬停效果 */
        }
        .messages {
            margin-bottom: 20px; /* 与表单内容保持一定间距 */
        }
        .messages div {
            background-color: #f8d7da; /* 错误消息的背景颜色 */
            color: #721c24; /* 错误消息的文字颜色 */
            padding: 10px;
            border-radius: 5px;
            margin-bottom: 10px;
        }
    </style>
</head>
<body>
    <div class="messages">
        {% if messages %}
            {% for message in messages %}
                <div{% if message.tags %} class="{{ message.tags }}"{% endif %}>
                    {{ message }}
                </div>
            {% endfor %}
        {% endif %}
    </div>

    <div class="login-container">
        <form method="post" action="{% url 'login' %}" class="login-form">
            <h2>用户登录</h2>
            {% csrf_token %}
            <div class="form-group">
                <label for="id_username">用户名</label>
                <input type="text" name="username" id="id_username" required>
            </div>
            <div class="form-group">
                <label for="id_password">密码</label>
                <input type="password" name="password" id="id_password" required>
            </div>
            <button type="submit">登录</button>
        </form>
    </div>
</body>
</html>


  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-07-08 14:40
    关注

    引自免费微信小程序:皆我百晓生

    从提供的代码和描述中,我注意到了以下几个可能的问题和需要注意的地方:

    1. 硬编码的用户名和密码: 在 views.py 中,你使用了硬编码的用户名和密码 ('123' for both) 进行验证。这在实际应用中是不安全的,并且会导致只有使用这个特定用户名和密码的用户才能登录。你应该从数据库或其他安全的数据源中获取用户信息,并进行验证。
    2. 表单提交方式: 在 forms.py 中,你使用了 AuthenticationForm 作为基础,这是一个很好的起点。但确保你在提交表单时正确地传递了 request 对象和表单数据。
    3. 重定向问题: 如果登录成功,你使用了 redirect('lib/list') 进行重定向。确保你的 urls.py 中确实有对应的路径,并且该路径对应的视图可以正确处理请求。如果没有,你可能需要调整重定向的路径。
    4. 错误消息处理: 在 views.py 中,当验证失败时,你使用了 messages.error() 来显示错误消息。确保你在模板中正确地处理了这些消息。从提供的 login.html 来看,这部分处理是正确的。

    针对上述问题,以下是修改建议:

    1. 移除硬编码的用户名和密码: 从数据库中获取用户信息,并使用适当的验证方法进行验证。
    2. 确保URL路径正确: 确保 redirect('lib/list') 中的路径在你的 urls.py 中有对应的定义,并且该路径对应的视图可以处理请求。

    如果你遵循上述建议,并且确保其他部分的代码没有错误,那么你的登录页面应该能够正常工作。如果你仍然遇到问题,请提供更多信息或详细描述遇到的问题,我会进一步帮助你解决。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 7月8日

悬赏问题

  • ¥15 关于温度改变石墨烯介电性能(关键词-介电常数)
  • ¥150 HDMI分路器LT86102 的输出在890MHz频点处EMC超标8DB
  • ¥15 druid(相关搜索:数据库|防火墙)
  • ¥15 大一python作业
  • ¥15 preLaunchTask"C/C++: aarch64- apple-darwin22-g++-14 生成活动 文件”已终止,退出代码为-1。
  • ¥60 如何鉴定微信小程序数据被篡改过
  • ¥18 关于#贝叶斯概率#的问题:这篇文章中利用em算法求出了对数似然值作为概率表参数,然后进行概率表计算,这个概率表是怎样计算的呀
  • ¥20 C#上传XML格式数据
  • ¥15 elementui上传结合oss接口断点续传,现在只差停止上传和继续上传,各大精英看下
  • ¥20 手机截图相片分辨率降低一半