Html+css+Django+mysql简单实现一个员工管理系统

Html+css+Django+mysql简单实现一个员工管理系统,第1张

这是Django框架从入门到精通(第四章用户管理)内附源码 文章目录
  • 前言

  • 目录

    第一章:初识Django

    第二章:Django模板语法

    第三章:orm模块

    第四章:案例—用户管理

    第五章:Form和ModelForm

    第六章:Cookie和Session

    第七章:初始ajax

    第八章:总结


 前言:

经过前期的学习,我们掌握了最基本的用法,这期将把后面的知识点全部使用,只给大家简单说一下,具体知识点还是按流程来,给大家看一下成品:

 

 

这就是我们学习完之后的知识点,能做出来的,这个页面有些不太好看,我们可以用css来修饰,给大家看我的源码:

  • 建立数据库,并创建表: 
from django.db import models


# 部门类
class Department(models.Model):
    title = models.CharField(verbose_name='标题', max_length=32)

    def __str__(self):
        return self.title


# 员工类
class UserInfo(models.Model):
    name = models.CharField(verbose_name='姓名', max_length=16)
    password = models.CharField(verbose_name='密码', max_length=64)
    age = models.IntegerField(verbose_name='年龄')
    account = models.DecimalField(verbose_name='余额', max_digits=10, decimal_places=2, default=0)
    create_time = models.DateField(verbose_name='入职时间')
    # to与哪张表关联
    # to_field 表中的哪一列关联
    # Django 自动后面生成_id
    # 若部门删除
    # 1)级联删除 on_delete=models.CASCADE
    # 2) 置空 null=ture black=ture
    depart = models.ForeignKey(verbose_name="部门", to="Department", to_field="id", on_delete=models.CASCADE)

    gender_choices = (
        (1, "男"),
        (2, "女"),
    )
    gender = models.SmallIntegerField(verbose_name='性别', choices=gender_choices)


# 管理员类
class Admin(models.Model):
    username = models.CharField(verbose_name="用户名", max_length=32)
    password = models.CharField(verbose_name="密码", max_length=64)

 这里涉及到了主键约束,和级联删除,代码中有注释

  • 建立url:
urlpatterns = [
    # path('admin/', admin.site.urls),

    path('depart/list/', views.depart_list),

    path('uesr/model/form/add/', views.user_model_form_add),

    path('main/page/', views.main_page),
    # 将id传递
    path('user//edit/', views.user_edit),

    path('user//data/', views.user_data),

    path('admin/list/', views.admin_list),

    path('admin/add/', views.admin_add),

    path('admin//edit/', views.admin_edit),

    path('admin//delet/', views.admin_delet),

    path('admin//edit/password/', views.admin_edit_password),

    path('admin/login/', views.login),

    path('admin/logout/', views.logout)
]

这些都是url与函数的对应关系。

  • 主函数views.py

 首先给大家看我我们要导入的模块

# 导入forms模块
from django import forms
# 导入正则表达式
from django.core.validators import RegexValidator
# 导入自己设置报错模块
from django.core.exceptions import ValidationError
# 导入django自带的md5加密的盐
from django.conf import settings
# 导入中间件
from django.utils.deprecation import MiddlewareMixin
  •  定义md5方法将数据库加密
# 运用md5将数据库密码加密
def md5(data_string):
    obj = hashlib.md5(settings.SECRET_KEY.encode('utf-8'))
    obj.update(data_string.encode('utf-8'))
    return obj.hexdigest()
  •  定义bootstrap类
# 定义bootstrap类
class BootStrapModelForm(forms.ModelForm):
    # 定义init方法
    def __init__(self, *args, **kwargs):
        # 执行父类的init方法
        super().__init__(*args, **kwargs)

        # 循环modelform每一个字段,设置字段的插件
        for name, field in self.fields.items():
            if field.widget.attrs:
                # 若字典内有值
                field.widget.attrs["class"] = "form-control"
            else:
                # 若字典内有值
                field.widget.attrs = {"class": "form-control"}
  •  定义中间件
# 定义中间件
class AuthMiddleWare(MiddlewareMixin):
    def process_request(self, request):
        # 排除不需要登陆就可以访问的页面
        if request.path_info == "/admin/login/":
            return
            # 读取访问用户的session信息
        info_dict = request.session.get("info")
        if info_dict:
            return
        # 若没登陆去登录页面
        return redirect('/admin/login/')
  • 定义modelform类并继承bootstrap类  
# 继承bootstrap类
class UserModelForm(BootStrapModelForm):
    name = forms.CharField(min_length=2,
                           label="用户名",
                           # validators=正则表达式(方式一)
                           # validators=RegexValidator())
                           )

    # 正则表达式
    RegexValidator()

    class Meta:
        model = models.UserInfo
        fields = ["name", "password", "age", "account", "create_time", "depart", "gender"]

    # 方式2(定义钩子方法)
    def clean_name(self):
        txt_name = self.cleaned_data["name"]
        # 钩子方法校验
        if len(txt_name) > 10:
            raise ValidationError("格式错误")

        # 验证通过返回(必须这样写)
        return txt_name
  •  定义管理员modelform类,并继承bootstrap类
# 定义新的modelform管理员密码类
# 并继承Bootstrap父类
class AdminEditPasswordModelForm(BootStrapModelForm):
    confirm_password = forms.CharField(label="确认密码", widget=forms.PasswordInput(render_value=True))

    class Meta:
        model = models.Admin
        fields = ['password', 'confirm_password']

    def clean_password(self):
        # 获得用户输入的密码
        pwd = self.cleaned_data.get("password")
        # 用md5将数据加密
        md5_pwd = md5(pwd)
        # 在数据库中搜索id,password
        exists = models.Admin.objects.filter(id=self.instance.pk, password=md5_pwd).exists()
        if exists:
            raise ValidationError("重置的密码不能与之前的相同")
        return md5_pwd

    def clean_confirm_password(self):
        pwd = self.cleaned_data.get("password")
        confirm = md5(self.cleaned_data.get("confirm_password"))
        if confirm != pwd:
            raise ValidationError("账号密码不一致")
        return confirm
  •  员工类代码-增删改查
# 员工主页面
def main_page(request):
    # 去数据库中拿到所有信息
    model_user_info = models.UserInfo.objects.all()
    # 建数据库中信息传入前端
    return render(request, 'main_page.html', {"objects": model_user_info})


# 员工存储页面
def user_model_form_add(request):
    # 用户访问get方式
    if request.method == "GET":
        form = UserModelForm()
        return render(request, 'user_model_form_add.html', {"form": form})

    # 用户post请求提交数据,校验数据
    form = UserModelForm(data=request.POST)
    if form.is_valid():
        # 校验正确存入库
        form.save()
        return redirect('/main/page/')
    else:
        return render(request, 'user_model_form_add.html', {"form": form})


# 编辑员工信息
def user_edit(request, nid):
    row_object = models.UserInfo.objects.filter(id=nid).first()
    if request.method == "GET":
        form = UserModelForm(instance=row_object)
        return render(request, 'user_edit.html', {"form": form})

    elif request.method == "POST":
        form = UserModelForm(data=request.POST, instance=row_object)
        if form.is_valid():
            form.save()
            # 重定向回主页面
            return redirect('/main/page')
        return render(request, 'user_edit.html', {"form": form})


# 删除员工信息
def user_data(request, nid):
    models.UserInfo.objects.filter(id=nid).delete()
    # 删除后重定向
    return redirect('/main/page')
  •  管理员类增删改查
# 管理员列表
def admin_list(request):
    queryset = models.Admin.objects.all()
    return render(request, 'admin_list.html', {"queryset": queryset})


# 新建管理员
def admin_add(request):
    title = "新建管理员"
    if request.method == "GET":
        form = AdminModelForm()
        return render(request, 'admin_add.html', {'form': form, 'title': title})
    form = AdminModelForm(data=request.POST)
    if form.is_valid():
        form.save()
        return redirect('/admin/list/')
    return render(request, 'admin_add.html', {'form': form, "title": title})


# 编辑管理员
def admin_edit(request, nid):
    title = "管理员编辑表"
    row_object = models.Admin.objects.filter(id=nid).first()
    if not row_object:
        return redirect('/admin/list/')
    # get请求
    if request.method == 'GET':
        form = AdminModelForm(instance=row_object)
        return render(request, 'admin_edit.html', {"title": title, "queryset": form})
    # post请求保存到数据库
    elif request.method == "POST":
        form = AdminModelForm(data=request.POST, instance=row_object)
        if form.is_valid():
            # 校验正确保存到数据库
            form.save()
            return redirect('/admin/list/')
        return render(request, 'admin_edit.html', {"queryset": form})


# 删除管理员
def admin_delet(request, nid):
    models.Admin.objects.filter(id=nid).delete()
    # 重定向回列表页面
    return redirect('/admin/list/')


# 重置密码
def admin_edit_password(request, nid):
    row_object = models.Admin.objects.filter(id=nid).first()
    if not list:
        return redirect('/admin/list/')
    title = '重置管理员密码----{}'.format(row_object.username)
    if request.method == "GET":
        form = AdminEditPasswordModelForm(instance=row_object)
        return render(request, 'admin_edit_password.html', {"queryset": form, "title": title})
    elif request.method == "POST":
        form = AdminEditPasswordModelForm(data=request.POST, instance=row_object)
        if form.is_valid():
            form.save()
            return redirect('/admin/list/')
        return render(request, 'admin_edit_password.html', {"queryset": form, "title": title})


# 管理员登录类
class LoginForm(forms.Form):
    username = forms.CharField(label="用户名", widget=forms.TextInput, required=True)
    password = forms.CharField(label="密码", widget=forms.PasswordInput(render_value=True), required=True)

    def clean_password(self):
        pwd = self.cleaned_data.get("password")
        return md5(pwd)


# 管理员登录界面
def login(request):
    if request.method == "GET":
        form = LoginForm()
        return render(request, 'login.html', {"form": form})
    elif request.method == "POST":
        form = LoginForm(data=request.POST)
        if form.is_valid():
            # 去数据库校验账号和密码,获取用户对象
            admin_object = models.Admin.objects.filter(**form.cleaned_data).first()
            if not admin_object:
                # 主动添加错误
                form.add_error("password", "用户名或密码不正确")
                return render(request, 'login.html', {"form": form})
            # 进行cookie认证和session
            # 若正确,网站生成随机字符串,写到用户的浏览器cookie中,再写到session中
            else:
                # 写入session中
                request.session["info"] = {"id": admin_object.id, "name": admin_object.username}
                # 登录成功进行重定向
                return redirect('/main/page/')
        return render(request, 'login.html', {"form": form})


# 注销登录
def logout(request):
    request.session.clear()
    return redirect('/admin/login')

 这就是views的所有代码,给大家看一下前端的代码

 

 首先:

  • 管理员添加html代码



    
    Title



    
        
             {{ title }}注册表
        
        
{% csrf_token %} {% for iteam in form %} {{ iteam.label }}: {{ iteam }}


{{ iteam.errors.0 }} {% endfor %}

  •  修改管理员信息html代码



    
    Title



    
        
             {{ title }}
        
        
{% csrf_token %} {% for iteam in queryset %} {{ iteam.label }}: {{ iteam }}


{{ iteam.errors.0 }} {% endfor %}

 修改管理员密码html代码



    
    Title



    
        
             {{ title }}
        
        
{% csrf_token %} {% for iteam in queryset %} {{ iteam.label }}: {{ iteam }}


{{ iteam.errors.0 }} {% endfor %}

  • 管理员页面html代码



    
    Title
    


新建管理员

    {% for obj in queryset %}
        
管理员中心
id 姓名 密码 密码 *** 作 *** 作
{{ obj.id }} {{ obj.username }} ********* { obj.id }}/edit/password/">重置密码 { obj.id }}/edit/">编辑 { obj.id }}/delet/">删除 {% endfor %}
  •  登录页面的html代码




    
    
    Document
    



{% csrf_token %} 管理员登录 {{ form.username.label }}:{{ form.username }}


{{ form.username.errors.0 }} {{ form.password.label }}:{{ form.password }}


{{ form.password.errors.0 }}

  •  部门添加页面html代码



    
    Title


{% csrf_token %}
  •  员工主页面html代码



    
    Title
    



新建员工

    {% for obj in objects %}
        
    {% endfor %}
用户信息中心
id 姓名 密码 年龄 余额 入职时间 性别 部门 *** 作
{{ obj.id }} {{ obj.name }} {{ obj.password }} {{ obj.age }} {{ obj.account }} {{ obj.create_time|date:"Y-m-d" }} {{ obj.get_gender_display }} {{ obj.depart.title }} { obj.id }}/edit/">编辑 { obj.id }}/data/">删除
  •  员工添加html代码



    
    Title



    
        
             编辑用户
        
        
{% csrf_token %} {% for iteam in form %} {{ iteam.label }}: {{ iteam }}


{{ iteam.errors.0 }} {% endfor %}

  •  员工注册html代码



    
    Title



    
        
             用户管理系统注册表
        
        
{% csrf_token %} {% for iteam in form %} {{ iteam.label }}: {{ iteam }}


{{ iteam.errors.0 }} {% endfor %}

 以上就是该程序的所有代码,只有登陆页面加了css


总结:

以上就是本期的分享,在后续的文章中给大家说明原理,并且代码内附注释,我们下期见

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/langs/717423.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-25
下一篇 2022-04-25

发表评论

登录后才能评论

评论列表(0条)

保存