day31 crm开发之用户ModelForm定制和密码加密

web程序模型表结构

from django.db import models
from rbac.models import UserInfo as RbacUserInfo

# Create your models here.
class School(models.Model):
    """
    校区表
    如:
        北京昌平校区
        上海浦东校区
        深圳南山校区
    """
    title = models.CharField(verbose_name='校区名称', max_length=32)

    def __str__(self):
        return self.title

    class Department(models.Model):
        """
        部门表
        """
        title = models.CharField(verbose_name='部门名称', max_length=16)

        def __str__(self):
            return self.title

    class UserInfo(RbacUserInfo):
        """
        员工表
        """
        nickname = models.CharField(verbose_name='姓名', max_length=16)
        phone = models.CharField(verbose_name='手机号', max_length=32)

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

        depart = models.ForeignKey(verbose_name='部门', to="Department",on_delete=models.CASCADE)

        def __str__(self):
            return self.nickname

stark组件v1模块中函数get_model_form_class新增入参, is_add=False

添加页面函数add_view请求forms定制函数请求参数is_add=True)

编辑页面函数change_view请求forms定制函数请求参数is_add=False)

加密函数

# -*- encoding: utf-8 -*-
"""
@File    : md5.py
@Time    : 2022/2/27 21:45
@Author  : simon
@Email   : 294168604@qq.com
@Software: PyCharm
"""
import hashlib


def gen_md5(origin):
    """
    md5加密
    :param origin:
    :return:
    """
    ha = hashlib.md5(b'jk3usodfjwkrsdf')
    ha.update(origin.encode('utf-8'))
    return ha.hexdigest()

web程序中业务逻辑代码如下
web/stark.py

from stark.service.v1 import site, StarkHandler, get_choice_text, StarkModelForm
from web import models
from django.core.exceptions import ValidationError
from django import forms
from web.utils.md5 import gen_md5

class SchoolHandler(StarkHandler):
    list_display = ['title']


site.register(models.School, SchoolHandler)


class DepartmentHandler(StarkHandler):
    list_display = ['title', ]


site.register(models.Department, DepartmentHandler)


class UserInfoAddModelForm(StarkModelForm):
    confirm_password = forms.CharField(label='确认密码')

    class Meta:
        model = models.UserInfo
        fields = ['name', 'password', 'confirm_password', 'nickname', 'gender', 'phone', 'email', 'depart', 'roles']

    def clean_confirm_password(self):
        password = self.cleaned_data['password']
        confirm_password = self.cleaned_data['confirm_password']
        if password != confirm_password:
            raise ValidationError('密码输入不一致')
        return confirm_password

    def clean(self):
        password = self.cleaned_data['password']
        self.cleaned_data['password'] = gen_md5(password)
        return self.cleaned_data


class UserInfoChangeModelForm(StarkModelForm):
    class Meta:
        model = models.UserInfo
        fields = ['name', 'nickname', 'gender', 'phone', 'email', 'depart', 'roles']


class UserInfoHandler(StarkHandler):
    list_display = ['nickname', get_choice_text('性别', 'gender'), 'phone', 'email', 'depart']

    def get_model_form_class(self, is_add=False):
        if is_add:
            return UserInfoAddModelForm
        return UserInfoChangeModelForm


site.register(models.UserInfo, UserInfoHandler)

效果图

posted @   simon_T  阅读(67)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示