汉疆唐土34 2023-05-01 22:41 采纳率: 100%
浏览 33
已结题

关于#django#的问题:基于Django+HTML+CSS的企业仓储管理系统 登录框输入了正确的用户名和密码依然报错 称用户不存在

基于Django+HTML+CSS的企业仓储管理系统 登录框输入了
正确的用户名和密码依然报错 称用户不存在

img


img


login_detail.html

<meta charset="UTF-8">
<html lang="en">
{% load static %}
<head>
    <link href="{% static 'css/login.css' %}" rel="stylesheet">
</head>

{% block welcome_message %}
    {% if from_url == "register" %}
        <div class="welcome-message">注册成功,你的{% if kind == "Administrator" %}编号{% else %}账号{% endif %}{{ uid }}</div>
    {% else %}
        <div class="welcome-message">欢迎</div>
    {% endif %}
{% endblock %}
{% block login_container %}
    {% if kind == "Administrator" %}
        <div class="login-kind-title">我是仓管</div>
    {% endif %}
    <div class="login-container">
        <div class="login-title">登录</div>
        <form method="post">
            {% csrf_token %}
            {{form.as_p}}
            <div class="submit-button">
                <input type="submit" value="登录"/>
                <a href="{% url 'register' kind%}">注册</a>
            </div>
        </form>
        <div class="return-button"><a href="{% url 'login' %}">返回上一页</a></div>
    </div>

{% endblock %}


form.py
from django import forms
from .models import Administrator


class AdminLoginForm(forms.Form):
    uid = forms.CharField(label='工号', max_length=10)
    # uname=forms.CharField(label='姓名',max_length=127)
    password = forms.CharField(label='密码', max_length=30, widget=forms.PasswordInput)

class AdminRegisterForm(forms.ModelForm):
    confirm_password = forms.CharField(widget=forms.PasswordInput, label="确认密码")

    class Meta:
        model = Administrator
        fields = (
                'admin_name',
                'admin_password',
                'confirm_password',
                'admin_gender',
                'admin_telephone',
                'admin_warehouse',
                'admin_id',
                  )

    def clean(self):
        cleaned_data = super(AdminRegisterForm, self).clean()
        password = cleaned_data.get('password')
        confirm_password = cleaned_data.get('confirm_password')
        # if confirm_password != password:
        #     self.add_error('confirm_password', 'Password does not match.')
        return cleaned_data


class AdminUpdateForm(AdminRegisterForm):
    class Meta:
        model = Administrator
        fields = ('admin_name',
                  'admin_password',
                  'confirm_password',
                  'admin_gender',
                  'admin_telephone',
                  'admin_warehouse')

views.py

from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render, reverse, redirect
from django.views.generic import CreateView, UpdateView
from constant import INVALID_KIND
from adminuser.forms import AdminRegisterForm,AdminLoginForm,AdminUpdateForm
from adminuser.models import Administrator


def home(request):
    return render(request, "adminuser/login_home.html")


# def login(request, kind)
def login(request, *args, **kwargs):
    if not kwargs or "kind" not in kwargs or kwargs["kind"] not in ["Administrator",'Manager']:
        return HttpResponse(INVALID_KIND)
    kind = kwargs["kind"]

    if request.method == 'POST':
        if kind == "Adminstrator":
            form = AdminLoginForm(data=request.POST)
        else:
            form = AdminLoginForm(data=request.POST)
    #
    #     if form.is_valid():
    #         uid = form.cleaned_data["uid"]
    #         temp_res = "hello, %s" % uid
    #         return HttpResponse(temp_res)
    # else:
    #     context = {'kind': kind}
    #     if kind == "Manager":
    #         form = ManageLoginForm()
    #     else:
    #         form = AdminLoginForm()
    #
    #     context['form'] = form
        if form.is_valid():
            uid = form.cleaned_data["uid"]
            if kind == "Administrator":
                admin_id = uid
                admin_warehouse = uid[:4]
                object_set = Administrator.objects.filter(admin_warehouse=admin_warehouse,\
                                                              admin_id=admin_id)
            if object_set.count() == 0:
                form.add_error("uid", "该账号不存在.")
            else:
                user = object_set[0]
                if form.cleaned_data["password"] != user.password:
                    form.add_error("password", "密码不正确.")
                else:
                    request.session['kind'] = kind
                    request.session['user'] = uid
                    request.session['id'] = user.id
                    # successful login
                    to_url = reverse("course", kwargs={'kind': kind})
                    return redirect(to_url)
        print(object_set.count(),admin_id,admin_warehouse,uid)
        return render(request, 'adminuser/login_detail.html', {'form': form, 'kind': kind})
    else:
        context = {'kind': kind}
        if request.GET.get('uid'):
            uid = request.GET.get('uid')
            context['uid'] = uid
            if kind == "Administrator":
                form = AdminLoginForm({"uid": uid, 'password': '12345678'})
        else:
            if kind == "Administrator":
                form = AdminLoginForm()
        context['form'] = form
        if request.GET.get('from_url'):
            context['from_url'] = request.GET.get('from_url')
        return render(request, 'adminuser/login_detail.html', context)


def logout(request):
    if request.session.get("kind", ""):
        del request.session["kind"]
    if request.session.get("user", ""):
        del request.session["user"]
    if request.session.get("id", ""):
        del request.session["id"]
    return redirect(reverse("login"))
#
#
def register(request, kind):
    func = None
    if kind == "Administrator":
        func = CreateAdminView.as_view()
    if func:
        return func(request)
    else:
        return HttpResponse(INVALID_KIND)


class CreateAdminView(CreateView):
    model = Administrator
    form_class = AdminRegisterForm
    # fields = "__all__"
    template_name = "adminuser/register.html"
    success_url = "login"

    def post(self, request, *args, **kwargs):
        form = self.get_form()

        if form.is_valid():
            return self.form_valid(form)
        else:
            self.object = None
            return self.form_invalid(form)

def update(request, kind):
    func = None
    if kind == "Administrator":
        func = UpdateAdminView.as_view()
    if func:
        pk = request.session.get("id", "")
        if pk:
            context = {
                "name": request.session.get("name", ""),
                "kind": request.session.get("kind", ""),
            }
            return func(request, pk=pk, context=context)
        else:
            return redirect(reverse("login"))
    else:
        return HttpResponse(INVALID_KIND)


class UpdateAdminView(UpdateView):
    model = Administrator
    form_class = AdminUpdateForm
    template_name = "adminuser/update.html"

    def get_context_data(self, **kwargs):
        context = super(UpdateAdminView, self).get_context_data(**kwargs)
        context.update(kwargs)
        context["kind"] = "Administrator"
        return context

    def get_success_url(self):
        return reverse("course", kwargs={"kind": "Administrator"})

models.py

from django.db import models
from django.db.models import CASCADE
from django.contrib.auth.models import AbstractUser

# Create your models here.
class Administrator(models.Model):
    admin_gender = [
        ("m", "男"),
        ("f", "女")
    ]
    admin_id = models.CharField(primary_key=True,max_length=10,verbose_name="仓管编号")
    admin_warehouse = models.CharField(max_length=4, verbose_name="仓库号")
    admin_gender = models.CharField(max_length=10, choices=admin_gender, default='m', verbose_name="性别")
    admin_name = models.CharField(max_length=255, blank=True, null=True,verbose_name="姓名")
    admin_telephone = models.CharField(max_length=255,null=True,verbose_name="电话号码")
    admin_password = models.CharField(max_length=30, verbose_name="密码")

    class Meta:
        managed = True
        db_table = 'administrator'

class Product(models.Model):
    product_id = models.IntegerField(primary_key=True)
    warehouse = models.ForeignKey('Warehouse', models.DO_NOTHING)
    name = models.CharField(max_length=255, blank=True, null=True)
    type = models.CharField(max_length=255, blank=True, null=True)
    purchase_price = models.FloatField(blank=True, null=True)
    selling_price = models.FloatField(blank=True, null=True)
    number = models.IntegerField(blank=True, null=True)
    supplier = models.CharField(max_length=255, blank=True, null=True)

    class Meta:
        managed = True
        db_table = 'product'

class Record(models.Model):
    record_id = models.IntegerField(primary_key=True)
    product = models.ForeignKey(Product, models.DO_NOTHING)
    warehouse_id = models.IntegerField()

    class Meta:
        managed = True
        db_table = 'record'


class Warehouse(models.Model):
    warehouse_id = models.IntegerField(primary_key=True)
    admin = models.ForeignKey(Administrator, models.DO_NOTHING)
    address = models.CharField(max_length=255, blank=True, null=True)

    class Meta:
        managed = True
        db_table = 'warehouse'

class AdminProfile(models.Model):
    admin = models.OneToOneField(Administrator, on_delete=models.CASCADE)
    picture = models.ImageField(upload_to='profile_images', default='default.jpg', blank=True)

    def __str__(self):
        return self.admin.admin_name


class UserProfile(AbstractUser):
    nikename = models.CharField(max_length=20, verbose_name="昵称", null=True, blank=True)
    mobile = models.CharField(max_length=11, verbose_name="手机号码", null=True, blank=True)
    schoolName = models.CharField(max_length=30, verbose_name="学校名称", null=True, blank=True)
    openid = models.CharField(max_length=100, verbose_name="用户的openid", blank=True, default="")

    def __str__(self):
        return self.username

    class Meta:
        verbose_name = "用户信息"
        verbose_name_plural = verbose_name


Python版本:3.11.2
pycharm版本:PyCharm 2023.1 (Professional Edition)
Django版本:4.2

  • 5.2更新

img

img

  • 写回答

1条回答 默认 最新

  • vimtion 2023-05-01 23:33
    关注

    可能是传参数传错了,你需要console看一下传的数据具体是什么

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 5月10日
  • 已采纳回答 5月2日
  • 修改了问题 5月2日
  • 创建了问题 5月1日

悬赏问题

  • ¥15 BP神经网络控制倒立摆
  • ¥20 要这个数学建模编程的代码 并且能完整允许出来结果 完整的过程和数据的结果
  • ¥15 html5+css和javascript有人可以帮吗?图片要怎么插入代码里面啊
  • ¥30 Unity接入微信SDK 无法开启摄像头
  • ¥20 有偿 写代码 要用特定的软件anaconda 里的jvpyter 用python3写
  • ¥20 cad图纸,chx-3六轴码垛机器人
  • ¥15 移动摄像头专网需要解vlan
  • ¥20 access多表提取相同字段数据并合并
  • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
  • ¥20 Java-Oj-桌布的计算