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 migrate5、静态文件管理
- 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删除


浙公网安备 33010602011771号