Django开发

from django import forms


class UserModelForm(forms.ModelForm):
    name = forms.CharField(min_length=3, label="用户名")

    # name = forms.CharField(min_length=3,label="用户名",error_messages={'required':"不能为空"})


class Meta: [
    model = models.UserInfo


fields = ["name", "password", "age", 'account', 'create_time', "gender", "depart"]
    ...


def __init__(self, *args, **kwargs):
    super().__init__(*args, **kwargs)
    # 循环找到所有的插件,添加了class=“form-control"
    for name, field in self.fields.items():
    # if name =="password":
    # continue


field.widget.attrs = {"class": "form-control", "placehold": field.label}
]

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=requests.POST)
if form.is_valid():
    # 如果数据合法,保存到数据库
    # {‘name':'123','password':'123','age':11,'account':Decimal('0'),'create time':
    # print(form.cleaned_data)
    # models.UserInfo.objects.creata(..)
    form.save()
    return redirect('/user/list/')

    # 校验失败(在页面显示错误信息)
return render(request.
'uesr_mdoel_form_add.html', {"form": form})

def user_edit(request, nid):
    """"编辑用户"""
    if requests.method == "GET":

        # 根据ID去数据库获取要编辑的那一行数据(对象)
       row_object = models.UserInfo.objects.filter(id=nid).first()

       form = UserModelForm(instance=row_object)
       return render(request, 'user_edit.html', {'form': form})

    row_object = models.UserInfo.objects.filter(id=nid).first()
    form = UserModelForm(data=request.POST, instance=row_object)
    if form.is_valid():
        form.save()
        return redirect('/user/list/')
    return render(request,'user_edit.html',{"form":form})

 

1、新建项目,打开pycharm

2、创建app

Terminal中输入

python manage.py startapp app01 

 

3、注册APP

 4、设计表结构(django)

4.1、用户表关联时存储的是名称 or ID?

ID:数据库范式(理论知识),常见开发都是这样。【节省存储开销】

名称:特别大的公司,查询的次数非常多,连表操作比较耗时【加速查找、允许数据冗余】

4.2、部门ID需不需要约束

只能是部门表中已经存在的ID

4.3、部门被删除,关联的门户

——删除用户,级联删除

——部门ID列置空

 

设计表结构(django),如图:

from django.db import models


# Create your models here.

class Departmemt(models.Model):
    """部门表"""


# id = models.BigAutoField(verbose_name='ID', primary_key=True)  #内置主键ID是自增的,是自动创建
# id = models.AutoField(verbose_name='ID', primary_key=True)     #int类型
title = models.CharField(verbose_name="标题", max_length=32)


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.DateTimeField(verbose_name="入职时间")
# 1、 有约束
#  -to,与那张表关联
#  -to_field,表中的那一列关联
# 2、django自动
#  -写的字段depart,而生成数据列depart_id
# 3、部门表被删除
#########3.1 级联删除
 depart = models.ForeignKey(to="Department", to_fields="id", on_delete=models.CASCADE)
#########3.2置空(空值)
#depart = models.ForeignKey(to="Department", to_fields="id", null=True, blank=True, on_delete=models.SET_NULL)
#在django中做的约束
gender_choices=(
    (1,""),
    (2,""),
)
gender = models.SmallIntegerField(verbose_name="性别",choices=gender_choices)

 4、在MySQL中生成表

  • 工具连接MySQL生成数据库。
create database gx_day15 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

 

 

 

  • 修改配置文件,连接MySQL
  • DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'HOST': '127.0.0.1',  # 数据库主机
            'PORT': 3306,  # 数据库端口
            'USER': 'root',  # 数据库用户名
            'PASSWORD': 'root123',  # 数据库用户密码
            'NAME': 'gx_day15'  # 数据库名字
        }
    }

    django命令生成数据库表

    python manage.py makemigrations
    python manage.py migrate

     5、静态文件管理

  • static目录

 

 

 

 6、部门管理

 

 

体验最原始的方法来做。

 

Django中提供Form和ModelForm组件(方便)

6.1部门列表

1、

 2、

   

3、样式copy网站:去HTML里编写 

4、在数据库中添加两行数据。

 

 

 5、在view.py中操作来获取数据表

 

from django.shortcuts import render
from app01 import models  # 直接利用models模块导入,而不是导入单个单个的表,太过于繁琐。


def depart_list(request):
    """"部门列表"""
    # 在数据库中获取所有的部门列表
    # [对象,对象,对象]


queryset = models.Department.objects.all()
#获取的数据表是queryset类型

return render(request, 'depart_list.html', {'queryset': queryset})
# 把queryset当作参数传递给render,在前端模版渲染的时候就可以取到这个queryset
def depart_add(request):
    """添加部门"""
    return render(request, 'depart_add.html')


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

 

 

 6、在Django 后端循环获取数据无意义,应该在它的前端页面上循环获取每一个数据。(先要进行上一步的参数传递)

<body>
{% for obj in queryset %}
     <tr>
         <th>{{ obj.id }}</th>
         <td>{{ obj.title }}</td>
         <td>
             <a class="btn btn-primary btn-xs">编辑</a>
             <a class="btn btn-danger btn-xs">删除</a>
         </td>
     </tr>

</body>

 7、点击新建部门跳转链接在新的界面

<div>
    <div class="container">
        <div style="">
            <a class="btn btn-success" href="/depart/add/"  target="_blank">
                <span class="glyphicon glyphicon-plus-sign" aria-hidden="true"></span>
                新建部门
            </a>
        </div>
    </div>
</div>

8、在view.py中增加新的HTML:depart_add.html

def depart_add(request):
    """添加部门"""
    return render(request, 'depart_add.html')

 

 在departrnd.html中添加。

 

8、用户管理

新建用户:

  • 原始方法理思路:不会采用(本质)【麻烦】

-用户提交数据没有校验。

-错误,页面上应该有错误提示。

-页面上,每一个字段都需要我们重新写一遍。

-关联的数据,手动去获取并展示循环展示在页面。

  •   Django组件

Form组件(小简便)

ModelForm组件(最简便)

 

  • 部门管理
  • 用户管理

                    用户列表

                    新建用户

-ModelForm,针对数据库中的某个表。
-Form.

8.4编辑用户

  • 点击编辑,跳转到编辑页面(将编辑的ID携带过去)。
  • 编辑页面(默认数据,根据ID获取并设置到页面中)
  • 提交:

                错误提示

                数据校验

               

models.UserInfo.filter(id=4).update(...)

 

8.5删除

 

posted @ 2022-04-01 18:10  费皿啊  阅读(78)  评论(0)    收藏  举报