使用django框架实现管理员的增删改查

1、构建数据表

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

2、url路径 

    path('admain/list/',admain.admain_list),
    path("admain/add/",admain.admain_add),
    path('admain/<int:nid>/edit/',admain.admain_edit),
    path('admain/<int:nid>/delete/',admain.admain_delete)

3、html页面(显示)

{% extends 'header.html' %}
{% block css %}

{% endblock %}
{% block content %}
    <div>

        <div class="container">
            <div style="margin-bottom: 10px">
                <a class="btn btn-success" href="/admain/add" target="_blank">
{#                    加号图标#}
                    <span class="glyphicon glyphicon-plus-sign" aria-hidden="true"></span>
                    新建管理员
                </a>
                <div style="float: right;width: 300px">
                    <form method="get">
                        <div class="input-group">
                            <input type="text" name="q" class="form-control" placeholder="关键字" value="{{ search_data }}">
                            <span class="input-group-btn">
                            <button class="btn btn-default" type="submit">
                                <span class="glyphicon glyphicon-search" aria-hidden="true"></span>
                            </button>
                            </span>
                        </div><!-- /input-group -->
                    </form>

                </div>

            </div>
            <div class="panel panel-default">
                <div class="panel-body">
                    <span class="glyphicon glyphicon-th-list" aria-hidden="true"></span>
                    管理员列表
                </div>

                <table class="table table-bordered">
                    <thead>
                    <tr>
                        <th>ID</th>
                        <th>用户名</th>
                        <th>密码</th>
                        <th>操作</th>
                    </tr>
                    </thead>
                    <tbody>
                    {% for obj in queryset %}
                        <tr>
                            <td>{{ obj.id }}</td>
                            <td>{{ obj.username }}</td>
                            <td>*******</td>
                            <td>
                                <a class="btn btn-primary btn-xs" href="/admain/{{ obj.id }}/edit/">编辑</a>
                                <a class="btn btn-danger btn-xs" href="/admain/{{ obj.id }}/delete/">删除</a>
                            </td>

                        </tr>
                    {% endfor %}

                    </tbody>
                </table>
            </div>
        </div>
        <ul class="pagination" style="margin:auto auto; position:fixed; top:620px;left: 100px">
            {{ page_string }}
        </ul>
    </div>
{% endblock %}
{% block js %}
{% endblock %}
</body>
</html>

4、html页面(编辑增加)

{% extends 'header.html' %}

{% block content %}
    <div class="container">
        <div class="panel panel-default">
            <div class="panel-heading">
                <h3 class="panel-title">新建管理员</h3>
            </div>
            <div class="panel-body">
{#            novalidate关掉页面的自动校验#}
                <form method="post" novalidate>
                    {% csrf_token %}
                    {% for field in form %}
                        <div class="form-group">
                            <label>{{ field.label }}</label>
                            {{ field }}
                            <span style="color: red">{{ field.errors.0 }}</span>
                        </div>
                    {% endfor %}
                    <button type="submit" class="btn btn-primary">提交</button>
                </form>

            </div>
        </div>
    </div>
{% endblock %}

5、类的创建

# modelform实例
from app01 import models
# 格式错误时显示的样式
from django.core.exceptions import ValidationError
# 分页组件
# 应用bootstrap样式
from app01.utils.bootstrap import BootStrapModelForm
from django import forms
from app01.utils.encrypt import md5

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

        # 使用插件,应用样式
        # widgets={
        #     "name":forms.TextInput(attrs={"class":"form-control"}),
        #     "password": forms.PasswordInput(attrs={"class": "form-control"}),
        # }


class PrettyModelForm(BootStrapModelForm):
    # 号码不可以被修改
    # mobile=forms.CharField(disabled=True,label="手机号")
    # 验证方法一 对号码格式进行限制
    # mobile=forms.CharField(
    #     label="手机号",
    #     validators=[RegexValidator(r'^1[3-9]\d{9}$','手机号格试错误'),],
    # )

    class Meta:
        model = models.PrettyNum
        fields = ["mobile", 'price', 'level', 'status']

    # def __init__(self, *args, **kwargs):
    #     super().__init__(*args, **kwargs)
    #     for name, field in self.fields.items():
    #         field.widget.attrs = {"class": "form-control", "placeholder": field.label}

    # 验证方法二
    def clean_mobile(self):
        txt_mobile = self.cleaned_data["mobile"]
        # 存在TRUE不存在False
        exists = models.PrettyNum.objects.filter(mobile=txt_mobile).exists()
        if exists:
            raise ValidationError("该手机号已经存在")
        if len(txt_mobile) != 11:
            raise ValidationError("格式错误")

        return txt_mobile


class PrettyEditModelForm(BootStrapModelForm):
    # 不能修改手机号
    # mobile=forms.CharField(disabled=True,label="手机号")
    class Meta:
        model = models.PrettyNum
        fields = ['mobile', 'price', 'level', 'status']

    # def __init__(self, *args, **kwargs):
    #     super().__init__(*args, **kwargs)
    #     for name, field in self.fields.items():
    #         field.widget.attrs = {"class": "form-control", "placeholder": field.label}

    # 验证方法二
    def clean_mobile(self):
        txt_mobile = self.cleaned_data["mobile"]
        # 存在TRUE不存在False
        # 去掉本个记录,查找是否有其他手机号相同的记录
        exists = models.PrettyNum.objects.exclude(id=self.instance.pk).filter(mobile=txt_mobile).exists()
        if exists:
            raise ValidationError("该手机号已经存在")
        if len(txt_mobile) != 11:
            raise ValidationError("格式错误")
        return txt_mobile


class AdmainModeForm(BootStrapModelForm):
    confirm_password=forms.CharField(
        label="确认密码",
        # 不删除里面的内容
        widget=forms.PasswordInput(render_value=True)
    )
    class Meta:
        model=models.Admin
        fields=["username","password","confirm_password"]
        widgets={
            "password":forms.PasswordInput(render_value=True)
        }
    def clean_password(self):
        pwd=self.cleaned_data.get("password")
        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


class AdmainEditModeForm(BootStrapModelForm):
    class Meta:
        model=models.Admin
        fields=['username']

6、密码加密方式

# 密码加密
from django.conf import settings
import hashlib

def md5(data_string):
    obj=hashlib.md5(settings.SECRET_KEY.encode("utf-8"))
    obj.update(data_string.encode("utf-8"))
    return obj.hexdigest()

7、函数的书写

from django.shortcuts import render,redirect
from app01 import models
from app01.utils.pagination import Pagination
from app01.utils.form import AdmainModeForm,AdmainEditModeForm
def admain_list(request):
    # models.Admin.objects.create(username="lisan",password="1111")
    data_dict = {}
    search_data = request.GET.get('q', "")
    if search_data:
        data_dict["username__contains"] = search_data
    # prettynum = models.PrettyNum.objects.all()
    # 按照level排序,不加负号为从小到大,加上为从大到小
    # prettynum = models.PrettyNum.objects.all().order_by("-level")
    queryset = models.Admin.objects.filter(**data_dict)
    # queryset=models.Admin.objects.all()
    page_object=Pagination(request,queryset)
    context={
        "queryset":page_object.page_queryset,
        "page_string":page_object.html(),
        "search_data": search_data,
    }
    return render(request,"admain_list.html",context)

def admain_add(request):
    title="新建管理员"
    if request.method=="GET":
        form=AdmainModeForm()
        return render(request,"add.html",{'form':form,"title":title})

    form=AdmainModeForm(data=request.POST)
    if form.is_valid():
        form.save()
        return redirect("/admain/list/")
    return render(request,"add.html",{'form':form,"title":title})

def admain_edit(request,nid):
    row_object=models.Admin.objects.filter(id=nid).first()
    if not row_object:
        return redirect("/admain/list/")

    title="编辑管理员"
    if request.method=="GET":
        form=AdmainEditModeForm(instance=row_object)
        return render(request,"add.html",{'form':form,"title":title})

    form=AdmainEditModeForm(data=request.POST,instance=row_object)
    if form.is_valid():
        form.save()
        return redirect('/admain/list')

    return render(request, "add.html", {'form': form, "title": title})

def admain_delete(request,nid):
    models.Admin.objects.filter(id=nid).delete()
    return redirect("/admain/list/")

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值