基于Django+HTML+CSS的企业仓储管理系统 登录框输入了
正确的用户名和密码依然报错 称用户不存在
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更新