栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Django开发-ModelForm进行用户管理

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Django开发-ModelForm进行用户管理

1、models.py
from django.db import models

# Create your models here.

class Department(models.Model):
    '''部门表'''
    title = models.CharField(verbose_name='标签',max_length=32)

    # 实例化对象用print输出时是一个对象,__str__(self) 可以打印具体的属性
    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 decimal(10,2) 小数
    account = models.DecimalField(verbose_name="账户余额",max_digits=10,decimal_places=2,default=0)
    # create_time = models.DateTimeField(verbose_name="入职时间")
    create_time = models.DateField(verbose_name="入职时间")

    # depart_id 为外键,连接Department表中的id
    # - to,与哪张表关联
    # - to_field,表中的哪一列关联
    # on_delete=models.CASCADE() 表示删除时级联
    # 2.django自动
    #   - 写的depart
    #   - 生成数据列 depart_id
    # 3.部门表被删除
    # ### 3.1 级联删除
    depart = models.ForeignKey(verbose_name="部门",to="Department",to_field="id",on_delete=models.CASCADE)
    # ### 3.2 on_delete=models.SET_NULL 表示删除时置空
    # depart = models.ForeignKey(to="Department",to_field="id",null=True,blank=True,on_delete=models.SET_NULL)

    # 在django中做的约束
    gender_choices = (
        (1,"男"),
        (2,"女"),
    )
    gender = models.SmallIntegerField(verbose_name="性别",choices=gender_choices)

    # level_choices = (
    #     (1, "0级"),
    #     (2, "1级"),
    # )
    # level = models.SmallIntegerField(verbose_name="级别",choices=level_choices)
2、urls.py
from django.contrib import admin
from django.urls import path
from my_app import views

urlpatterns = [

    path('user/list/', views.user_list),
    path('user/add/', views.user_add),
    path('user/model/form/add/', views.user_model_form_add),
    path('user/del/', views.user_del),
    path('user//up/', views.user_up),  # 访问形式:http://127.0.0.1:8000/user/1/up/
    path('user//edit/', views.user_edit),  # 访问形式:http://127.0.0.1:8000/user/1/edit/

]
3、views.py
# 用户列表
def user_list(request):

    userLists = models.UserInfo.objects.all()
    for user in userLists:
        # 性别是元组:(1,"男"),(2,"女")  user.gender为数字
        # user.get_gender_display()为数字对应的属性     user.get_字段属性_display()
        # user.create_time.strftime("%Y-%m-%d") 将datetime类型转换为字符串类型
        print(user.id,user.name,user.password,user.age,user.account,user.create_time.strftime("%Y-%m-%d"),user.get_gender_display(),user.depart.title)
        user.depart_id     # 获取数据库中存储的那个字段值
        user.depart  # 根据id自动去关联的表中获取那一行数据depart对象。
        # print(user.depart_id,user.depart.title)

    return render(request,"user_list.html",{"user_list":userLists})


# 删除用户
def user_del(request):
    user_id = request.GET.get("id")
    models.UserInfo.objects.filter(id=user_id).delete()

    return redirect("/user/list/")


# ************* ModelForm 示例 *************
# from django import forms

class DateInput(forms.DateInput):
    input_type = 'date'

class UserModelForm(forms.ModelForm):

    # 对字段属性加限制条件
    name = forms.CharField(min_length=2,label="姓名")  # 限制条件:至少输入2个字符
    # create_time = forms.DateTimeField(label="入职时间") # 限制条件:必须是时间格式
    # validators 正则表达式:密码至少包含 数字和英文,长度6-20  validators="^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,20}$"
    # password = forms.CharField(label="密码")


    class Meta:
        model = models.UserInfo
        fields = ["name","password","age","account","create_time","gender","depart"]
        # widgets = {      # 加css样式
        #     # "name": forms.TextInput(attrs={"class": "form-control"}),
        #     "password": forms.PasswordInput(attrs={"class": "form-control","placeholder": "密码"}),
        #     # "age": forms.TextInput(attrs={"class": "form-control"}),
        #     "create_time": DateInput(attrs={"class": "form-control dt"}),
        #
        # }
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        # 循环找到所有的插件,添加了
        for name,field in self.fields.items():
            # if name == "password":
            #     continue
            # if name == "create_time" or name == "password":
            #     continue
            #     # 多添加一个id属性
            #     # field.widget.attrs = {"class": "form-control dt", "placeholder": field.label}
            # else:
            #     field.widget.attrs = {"class": "form-control", "placeholder": field.label}
            field.widget.attrs = {"class": "form-control", "placeholder": field.label}

# 添加用户ModelForm
def user_model_form_add(request):
    ''' 添加用户ModelForm '''
    req_method = request.method
    if req_method == 'GET':
        form = UserModelForm()
        return render(request, "user_model_form_add.html", {"form": form})

    # 用户POST提交数据,数据校验
    form = UserModelForm(data=request.POST)
    if form.is_valid():   # 数据校验成功
        # 如果数据合法,就存到数据库
        print(form.cleaned_data)   # {'name': '333', 'password': '333', 'age': 33, 'account': Decimal('333'), 'create_time': datetime.datetime(2021, 11, 11, 0, 0, tzinfo=), 'gender': 1, 'depart': }
        # models.UserInfo.objects.create(...) # 把数据存到数据库中 方式1

        # 方式2(推荐)
        form.save()   # 直接将数据存储到数据库
        return redirect("/user/list/")

    # 数据校验失败
    # else:
    # print(form.errors)  数据校验错误信息
    return render(request, "user_model_form_add.html", {"form": form})

# 更新用户(ModelForm格式)
def user_edit(request,uid):
    req_method = request.method
    # 根据id获取数据对象
    user = models.UserInfo.objects.filter(id=uid).first()
    if req_method == 'GET':
        form = UserModelForm(instance=user)
        return render(request, "user_model_form_edit.html", {"form": form})

    # data是从页面传过来的更新数据,instance表示要更新的那个数据
    form = UserModelForm(data=request.POST,instance=user)
    # 数据校验
    if form.is_valid():

        # form.save() 默认保存的是用户输入的所有数据
        # 如果想除了保存用户输入的值之外,再添加其他值 用 form.instance.字段名 = 值
        # form.instance.password = "123456"

        form.save()    # 直接将数据存储到数据库
        return redirect("/user/list/")
    # 数据校验失败
    return render(request,"user_model_form_edit.html",{"form": form})


4、layout.html (模板)
{% load static %}




    
    Title
    
    
    
    

    {% block css %}{% endblock %}






    {% block content %} {% endblock %}





{% block js %}{% endblock %}


5、user_list.html
{% extends 'layout.html' %}

{% block content %}
    
        
            {#              #}
            
                
                新建用户
            

            
                
                新建用户ModelForm
            

        

        
            
            
                 用户列表
            

            
            

                {% for user in user_list %}
                    
                {% endfor %}

                
id 姓名 密码 年龄 账户余额 入职时间 性别 所属部门 操作
{{ user.id }} {{ user.name }} {{ user.password }} {{ user.age }} {{ user.account }} {{ user.create_time|date:"Y-m-d" }} {{ user.get_gender_display }} {{ user.depart.title }} { user.id }}/edit/" >编辑 {# { user.id }}/up/" >编辑#} {# { user.id }}" >编辑#} { user.id }}" >删除
{% endblock %}
6、user_model_form_add.html
{% extends 'layout.html' %}

{% load static %}

{% block content %}
    
        
            
                

添加用户
{% csrf_token %} {% for field in form %} {{ field }} {{ field.errors.0 }} {% endfor %}
{% endblock %} {% block js %} {# #} {# #} {% endblock %} {##} {##} {##} {# #} {# Title#} {##} {##} {##} {##} {##} {#
#} {# {% for field in form %}#} {# {{ field.label }} : {{ field }}#} {# {% endfor %}#} {#
#} {##} {##}

7、user_model_form_edit.html
{% extends 'layout.html' %}

{% load static %}

{% block content %}
    
        
            
                

添加用户
{% csrf_token %} {% for field in form %} {{ field }} {{ field.errors.0 }} {% endfor %}
{% endblock %} {% block js %} {# #} {# #} {% endblock %}

8、效果图

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/960417.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号