from django import forms
from django.shortcuts import render, redirect
from app01 import models
# Create your views here.
def depart_list(request):
    """ 部门列表 """
    # 去数据库中获取所有的部门列表
    # queryset 理解为 [对象,对象,对象]  要循环才取的出来
    queryset = models.Department.objects.all()  # 获取所有部门列表的信息
    # 把 queryset 当作参数传递给 render ,内部在模板渲染的时候就可以取到 queryset
    return render(request, "depart_list.html", {'queryset': queryset})
def depart_add(request):
    """ 添加部门 """
    if request.method == "GET":
        return render(request, "depart_add.html")
    # 获取用户POST提交过来的数据 (title输入为空)
    title = request.POST.get("title")
    # 保存到数据库
    models.Department.objects.create(title=title)
    # 重定向回部门列表
    return redirect("/depart/list/")
def depart_delete(request):
    """ 删除部门 """
    # 获取ID
    nid = request.GET.get('nid')
    # 删除
    models.Department.objects.filter(id=nid).delete()
    # 跳转回
    return redirect("/depart/list/")
def depart_edit(request, nid):
    """ 修改部门 """
    if request.method == "GET":
        # 根据nid,获取他的数据 [obj,]
        row_object = models.Department.objects.filter(id=nid).first()
        # print(row_object.id, row_object.title)
        return render(request, "depart_edit.html", {"row_object": row_object})
    # 获取用户提交的标题
    title = request.POST.get("title")
    print(title)
    # 根据ID找到数据库中的数据,并进行更新
    # models.Department.objects.filter(id=nid).update(title=title, 其他=123) 多个或者其他 其他上面获取,这里更新
    models.Department.objects.filter(id=nid).update(title=title)
    # 重定向回部门列表
    return redirect("/depart/list/")
def user_list(request):
    """ 用户管理 """
    # 获取所有用户列表 [对象,对象,obj,obj]
    queryset = models.UserInfo.objects.all()
    # 用python的语法获取数据
    """
    for obj in queryset:
    print(obj.id, obj.name,obj.account,obj.create_time.strftime("%Y-%m-%d"),obj.gender,obj.get_gender_display(),obj.depart_id,obj.depart.title)
    # datetime.datetime 转字符串 .strftime("%Y-%m-%d-%H-%M")  用python的语法获取数据
    # <td>{{ obj.create_time|date:"Y-m-d H:i:s" }}</td>  在HTML中对时间的处理,所有的都不加括号
    # print(type(obj.create_time),type(obj.create_time.strftime("%Y-%m-%d")))
    # obj.gender 对应的是数据库储存的1/2
    # obj.get_gender_display()  # 根据数值1/2 去找对应的文本内容,不用自己去找   get_字段名_display()
    # xx = models.Department.objects.filter(id=obj.depart_id).first()   # 手动写代码把id=obj.depart_id去找相关的表
    # xx.title  # 在相关的表中取 title
    # obj.depart_id  # 获取数据库中存储的那个字段
    # obj.depart.title  # 根据id自动去关联的表中获取哪一行数据 depart对象。
    """
    return render(request, 'user_list.html', {"queryset": queryset})
def user_add(request):
    """ 添加用户 """
    context = {
        'gender_choices': models.UserInfo.gender_choices,
        'depart_list': models.Department.objects.all()
    }
    return render(request, "user_add.html", context)
# ################### ModelForm 示例###################
class UserModelForm(forms.ModelForm):
    # name 字符串长度最小等于3
    name = forms.CharField(min_length=3, label="用户名")
    # 校验所有数据是否为空
    class Meta:
        model = models.UserInfo
        fields = "__all__"  # 自动显示所有
        # fields = ["name", "password", "age", "account", "create_time", "gender", "depart"
        #   ]   # 指定显示哪些
        exclude = ['depart']  # 除了depart都显示,哪里有问题
        # widgets = {
        #     "name": forms.TextInput(attrs={"class": "form-control"}),
        #     "password": forms.PasswordInput(attrs={"class": "form-control"}),
        #     "age": forms.TextInput(attrs={"class": "form-control"}),
        # }
    def __init__(self, *args, **kwargs):  # 重新定义它的__init__方法
        super().__init__(*args, **kwargs)  # 执行它父类定义的方法
        # 循环找到所有的插件,添加了class="form-control"
        for name, field in self.fields.items():
            # if name == "password":  不添加样式的可以在这里判断一下
            #     continue
            # print(name, field)  # name可以拿到所有定义的字段,名字。field 可以拿到它对象
            field.widget.attrs = {"class": "form-control",
                                  "placeholder": field.label}  # widget 表示拿到的插件
def user_model_form_add(request):
    """ 添加用户(ModelForm版本) """
    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():
        # 如果数据合法,保存到数据库
        # {'name': '123', 'password': '123', 'age': 11, 'account': Decimal('1'), 'create_time': datetime.datetime(2011, 11, 12, 0, 0, tzinfo=zoneinfo.ZoneInfo(key='UTC')), 'gender': 2, 'depart': <Department: IT部门>}
        # print(form.cleaned_data)
        # models.UserInfo.objects.create(...)  # 保存到数据库
        form.save()  # 自动将提交的数据保存到数据库的表里面 那个表(定义的这个表 model = models.UserInfo)
        return redirect('/user/list/')
    # 校验失败(在页面上显示错误信息)
        # print(form.errors)
    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":
        # 根据ID去数据库获取要编辑的那一行数据(对象) instance=row_object  modelform默认在页面显示每一个
        form = UserModelForm(instance=row_object)
        return render(request, 'user_edit.html', {'form': form})
    # instance=row_object 不是添加,而是更新
    form = UserModelForm(data=request.POST, instance=row_object)
    if form.is_valid():
        # 默认保存的是用户输入的所有数据,如果想要再用户输入以外增加一点值
        # form.instance.字段名 = 值
        form.save()
        return redirect('/user/list/')
    return render(request, 'user_edit.html', {"form": form})
def user_delete(request, nid):
    models.UserInfo.objects.filter(id=nid).delete()
    return redirect('/user/list/')

Django views.py 增,删,改的更多相关文章

  1. django 多对多 增 删 改 查

      一.通过url方式实现多对多的:增加,删除,编辑 代码目录: urls.py 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ...

  2. django一对多 增 删 改 查

    实现一对多表查询功能 项目代码: models.py from django.db import models # Create your models here. class Classes(mod ...

  3. django ajax增 删 改 查

    具于django ajax实现增 删 改 查功能 代码示例: 代码: urls.py from django.conf.urls import url from django.contrib impo ...

  4. C# ADO.NET (sql语句连接方式)(增,删,改)

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  5. 好用的SQL TVP~~独家赠送[增-删-改-查]的例子

    以前总是追求新东西,发现基础才是最重要的,今年主要的目标是精通SQL查询和SQL性能优化.  本系列主要是针对T-SQL的总结. [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础] ...

  6. iOS FMDB的使用(增,删,改,查,sqlite存取图片)

    iOS FMDB的使用(增,删,改,查,sqlite存取图片) 在上一篇博客我对sqlite的基本使用进行了详细介绍... 但是在实际开发中原生使用的频率是很少的... 这篇博客我将会较全面的介绍FM ...

  7. iOS sqlite3 的基本使用(增 删 改 查)

    iOS sqlite3 的基本使用(增 删 改 查) 这篇博客不会讲述太多sql语言,目的重在实现sqlite3的一些基本操作. 例:增 删 改 查 如果想了解更多的sql语言可以利用强大的互联网. ...

  8. ADO.NET 增 删 改 查

    ADO.NET:(数据访问技术)就是将C#和MSSQL连接起来的一个纽带 可以通过ADO.NET将内存中的临时数据写入到数据库中 也可以将数据库中的数据提取到内存中供程序调用 ADO.NET所有数据访 ...

  9. MVC EF 增 删 改 查

    using System;using System.Collections.Generic;using System.Linq;using System.Web;//using System.Data ...

  10. 第18课-数据库开发及ado.net 连接数据库.增.删.改向表中插入数据并且返回自动编号.SQLDataReade读取数据

    第18课-数据库开发及ado.net 连接数据库.增.删.改向表中插入数据并且返回自动编号.SQLDataReade读取数据 ADO.NET 为什么要学习? 我们要搭建一个平台(Web/Winform ...

随机推荐

  1. linux系统中安装虚拟机

    在linux系统中,利用图形化界面安装虚拟机.首先启动 virt-manager,当然没有安装 virt-manager需要先安装好. 1 $ apt-get install virt-manager ...

  2. 8、ThreadPoolTaskExecutor线程并发

    一.线程池的优点: 1.降低资源消耗.通过重复利用自己创建的线程降低线程创建和销毁造成的消耗. 2.提高响应速度.当任务到达时,任务可以不需要等到线程创建就能立即执行. 3.提高线程的可管理性.线程是 ...

  3. 1+X Web初级笔记查漏补缺+练习题

    学习笔记: position:relative是相对定位,是相对于自身位置移动,但是占据原有空间 absolute是绝对定位,原有空间不保留会被其他元素挤占 绝对定位 absolute不占位置完全浮动 ...

  4. vlc qt player 播放器开发实例

    (一)VLC-Qt下载 官网地址:https://vlc-qt.tano.si/ Github 地址:https://github.com/vlc-qt 示例地址:https://github.com ...

  5. 学习.NET MAUI Blazor(四)、路由

    Web应用程序的可以通过URL将多个页面串联起来,并且可以互相跳转.Web应用主要是使用a标签或者是服务端redirect来跳转.而现在流行的单页应用程序 (SPA) ,则通过路由(Router)来实 ...

  6. 宝塔SSL

    1:开启面板SSL访问教程 开启完之后,要以 https 方式访问面板 一定要先 下载证书 和 复制证书密码 再点"开启ssl",不然得重置再走一遍流程. [教程贴]如何开启面板S ...

  7. [Unity]Unity更改黑色主题(个人版)

    前言 首先需要一款软件:Winhex,由于现在已经是2018年,大部分百度的软件都已经失效或者出现一堆bug,我费了九牛二虎之力才找到这个可用的,下面是下载地址: 链接:https://pan.bai ...

  8. Node.js 应用全链路追踪技术——全链路信息存储

    作者:vivo 互联网前端团队- Yang Kun 本文是上篇文章<Node.js 应用全链路追踪技术--全链路信息获取>的后续.阅读完,再来看本文,效果会更佳哦. 本文主要介绍在Node ...

  9. 论文翻译:2022_Time-Shift Modeling-Based Hear-Through System for In-Ear Headphones

    论文地址:基于时移建模的入耳式耳机透听系统 引用格式: 摘要 透传(hear-through,HT)技术是通过增强耳机佩戴者对环境声音的感知来主动补偿被动隔离的.耳机中的材料会减少声音 500Hz以上 ...

  10. IDEA新手使用教程【详解】

    IDEA是一款功能强悍.非常好用的Java开发工具,近几年编程开发人员对IDEA情有独钟. Intellij Idea使用技巧总结 1.如何设置通过鼠标滑轮改变编辑器字体大小 2.如何设置自动导包功能 ...