02.案列项目Demo
1.创建项目
1. 创建项目
用pycharm 选择对应的编译器,输入对应的文件名,点击创建项目。删除默认外层生成的template和DIRS 配置项:
2. 创建App
创建appo1的命令:
python manage.py startapp app01
如果使用pycharm>tool>manage.py task:
manage.py@day16 > startapp app01
生成APP之后,在setting的INSTALLED_APP中注册:
INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','app01.apps.App01Config'
]
3.用Django的方式创建表结构
进入app01>model.py中,写表结构:
from django.db import modelsclass Department(models.Model):"""部门表"""id = models.BigAutoField(verbose_name='id,自增', primary_key=True) # bigint类型# 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_length=10, decimal_places=2, default=0)creat_time = models.DateTimeField(verbose_name='入职时间')# 无约束depart_id = models.BigIntegerField(verbose_name='部门ID')# 1.有约束# - to:表示与哪张表关联# - to_field:与这张表的哪一列关联# 2.django:自动加# - 写的depart,但实际数据库字段为depart_id# 3.如果部门表被删除# - 3.1级联删除depart = models.ForeignKey(to='Department', to_field='id', on_delete=models.CASCADE)# - 3.2 置空depart = models.ForeignKey(to='Department', to_field='id', blank=True, null=True ,on_delete=models.SET_NULL)
4.生成数据库的表
格式:mysql [-h 主机名] -u 用户名 -p密码 [-P端口号] [-D数据库名]
参数选项:
[-h主机名或ip地址]或者[–host=主机名ip地址]:指定登录的主机名;
[-u用户名]或者[–user=用户名]:指定用户登录的用户名;
[-p密码(p小写)]或者[–password=密码]:输入登录密码;
[-P端口号(P大写)]或者[–port=端口号]:指定登录的MySQL的端口号;
[-D数据库名]或者[–database=数据库名]:指定登录的数据库名称;
登录本地数据库,只需要指定用户名(-u)和密码(-p)即可,不需要指定主机名(-h)
create database day16 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
查看所有数据库:
show databases;
在setting.py中修改数据库配置:
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'django', # 数据库名字'USER': 'root','PASSWORD': '123456','HOST': '127.0.0.1', # 要连接哪台机器上的MySQL'PORT': '3306' # 端口号}
}
python manage.py makemigrations
python manage.py migrate
查看生成的表:
use 数据名;
show tables;
desc app01_department;
5.部门管理
目前只是体验,用最原始的方法做的
Django中提供Form和ModelForm组件,非常方便。
5.1 部分列表
from django.db import modelsclass Department(models.Model):"""部门表"""id = models.BigAutoField(verbose_name='id,自增', primary_key=True) # bigint类型# 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)creat_time = models.DateTimeField(verbose_name='入职时间')# 无约束# depart_id = models.BigIntegerField(verbose_name='部门ID')# 1.有约束# - to:表示与哪张表关联# - to_field:与这张表的哪一列关联# 2.django:自动加# - 写的depart,但实际数据库字段为depart_id# 3.如果部门表被删除 # - 3.1级联删除depart = models.ForeignKey(to='Department', to_field='id', on_delete=models.CASCADE)# - 3.2 置空depart = models.ForeignKey(to='Department', to_field='id', blank=True, null=True, on_delete=models.SET_NULL)# 4.Django中做的约束:gender_choices = ((0, '女'),(1, '女'))gender = models.SmallIntegerField(verbose_name='性别,男1,女0', choices=gender_choices)
2.模板的继承
通过将共用的部分做成一个模板,然后在不同的位置插入插槽,最终通过继承共用部分,重写差异化部分,达到代码复用。
在复用的代码部分,加入插槽,文件命名为layout.html:
<div class="content">{% block css %}{% endblock %}{% block content %}{% endblock %}
</div>
继承共有部分,然后重写差异化部分:
%{% extends 'layout.html' %}{% block content%}<h1>首页</h1>
{% endblock %}
3.用户管理
7.1新建用户
- 原始方法实现思路(较本质,但麻烦):
- 用户提交的数据,校验比较麻烦
- 如果出现字段不合法,应该有字段不合法提示
- 页面渲染,每一个字段都需要重写一遍
- 对于关联表,还要自己去表查询后渲染
- Django组件实现:
- Form组件(中等简便):只能解决前三点,最后一个关联表查询还需要自己写
- ModelForm组价(最简便):针对数据库中的某个表建议使用ModelForm
7.2Dangjo的Form组件
views.py中:
class Myform(Form): #Dajango中的Formuser = forms.CharField(widget = forms.Input)pwd = forms.CharField(widget = forms.Input)emaill = forms.EmailField(widget = forms.Input)def user_add(request):"""添加用户(原始方式)"""if request.method == "GET":form = Myform()return render(request, 'user_add.html', {'form':form})
在user_add.html中
<form class="form-horizontal" method="post">{{form.user}}{{form.pwd}}{{form.email}}<!-->自动生成HTML标签,代替下面的:<input type="text" class="form-control" name="name" placeholder="请输入部门名称"><!--></form>
还能更简洁的方式:
<form class="form-horizontal" method="post">{% for field in form%}{# 会循环将form中的字段转换成HTMl渲染在页面上 #}{{field}}{% endfor %}
</form>
7.3 Dangjo的ModelForm组件()
1.model.py中
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)creat_time = models.DateTimeField(verbose_name='入职时间')depart = models.ForeignKey(to='Department', to_field='id', on_delete=models.CASCADE)depart = models.ForeignKey(to='Department', to_field='id', blank=True, null=True, on_delete=models.SET_NULL)gender_choices = ((0, '女'),(1, '男'))gender = models.SmallIntegerField(verbose_name='性别,男1,女0', choices=gender_choices)
2.views.py中
class Myform(ModelForm):#支持自定义字段 xx = form.CharField('...')class Meta:model = UserInfofields = ['name','password','age','creat_time','depart','gender','xx']def user_add(request):"""添加用户(原始方式)"""if request.method == "GET":form = Myform()return render(request, 'user_add.html', {'form':form})
3.user_add.html中
<form class="form-horizontal" method="post">{% for field in form%}{# 会循环将form中的字段转换成HTMl渲染在页面上 #}{{field}}{% endfor %}
</form>
7.4 编辑用户
from django import formsclass UserModelForm(forms.ModelForm):name = forms.CharField(min_length=3, max_length=16, label='姓名')# password = forms.CharField(label='密码', validators=re.compile(r'\d+'))class Meta:model = models.UserInfofields = ['name', 'password', 'age', 'account', 'creat_time', 'gender', 'depart']# 这种方式太麻烦了# widgets = {# 'name': forms.TextInput(attrs={'class': 'form-control'}),# 'age': forms.PasswordInput(attrs={'class': 'form-control'}),# 'account': forms.TextInput(attrs={'class': 'form-control'}),# 'creat_time': forms.TextInput(attrs={'class': 'form-control'}),# 'gender': forms.TextInput(attrs={'class': 'form-control'}),# 'depart': forms.TextInput(attrs={'class': 'form-control'}),# }# 简写:重写初始化方法,找到对应的插件,为其加上属性def __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)# 循环找到所有插件, 为其加入class= 'form-control'for name, field in self.fields.items():print(name, field)field.widget.attrs = {'class': 'form-control', 'placeholder': f"请输入{field.label}"}def user_add_bymodelform(request):"""添加用户 by ModelForm"""if request.method == "GET":form = UserModelForm()return render(request, 'user_add_bymodelform.html', {'form': form})# POST提交数据,数据校验,存入数据库form = UserModelForm(data=request.POST)if form.is_valid():print(form.cleaned_data)# 如果数据合法,保存到数据库form.save()# 校验失败,返回错误信息print(form.errors)return render(request, 'user_add_bymodelform.html', {'form': form})def user_edit(request, id):"""编辑用户"""row_object = models.UserInfo.objects.filter(id=id).first()if request.method == "GET":# 根据id获取要更新的记录form = UserModelForm(instance=row_object)return render(request, 'user_edit.html', {'form': form})# POSTform = UserModelForm(data=request.POST, instance=row_object)if form.is_valid():# data=request.POST默认保存的是用用户输入的值,如果还需要加入一些字段值,可以# form.instance.字段名 = 新值form.save()return redirect('/user/list')return render(request, 'user_edit.html', {'form': form})def user_delete(request, id):models.UserInfo.objects.filter(id=id).delete()return redirect('/user/list')
7.5 模糊搜索
# 之前的搜索
models.PrettyNumber.objects.filter(id=XX,number=XXX)dict_data = {'id'XX, "number":XXX}
models.PrettyNumber.objects.filter(**dict_data)
Django中的对于数字的模糊搜索:
models.PrettyNumber.objects.filter(id=XX) # id=12
models.PrettyNumber.objects.filter(id__gt=XX) # id大于12
models.PrettyNumber.objects.filter(id__gte=XX) # id大于等于12
models.PrettyNumber.objects.filter(id__lt=XX) # id小于12
models.PrettyNumber.objects.filter(id__lte=XX) # id小于等于12
Django中的对于字符串的模糊搜索:
models.PrettyNumber.objects.filter(number="139") #字符串number筛选出完全等于139
models.PrettyNumber.objects.filter(number__startswith="139") #字符串number筛选出以139开头
models.PrettyNumber.objects.filter(number__endswith="155") #字符串number筛选出以155结尾
models.PrettyNumber.objects.filter(number__contains="999") #字符串number筛选出包含999
models.PrettyNumber.objects.filter(number__startswith="139") #字符串number筛选出以139开头
# 当然,也可以使用字典形式
data_dict = {"number__contains":"999"}
models.PrettyNumber.objects.filter(**data_dict) #字符串number筛选出包含999
7.6 分页
models.PrettyNumber.objects.all()[:10] # 取到前10
models.PrettyNumber.objects.filter(number__contains ="999")[5:10]# 数据库的总条数
counts = models.PrettyNumber.objects.all().count()
# 获取price=XXX 的数据条数
counts = models.PrettyNumber.objects.filter(price=XXX).count()
使用字典形式
data_dict = {“number__contains”:“999”}
models.PrettyNumber.objects.filter(**data_dict) #字符串number筛选出包含999
7.6 分页
models.PrettyNumber.objects.all()[:10] # 取到前10
models.PrettyNumber.objects.filter(number__contains ="999")[5:10]# 数据库的总条数
counts = models.PrettyNumber.objects.all().count()
# 获取price=XXX 的数据条数
counts = models.PrettyNumber.objects.filter(price=XXX).count()
相关文章:
02.案列项目Demo
1.创建项目 1. 创建项目 用pycharm 选择对应的编译器,输入对应的文件名,点击创建项目。删除默认外层生成的template和DIRS 配置项: 2. 创建App 创建appo1的命令: python manage.py startapp app01 如果使用pycharm>tool>…...
PDF校对:追求文档的精准与完美
随着数字化时代的到来,PDF已经成为了多数机构和个人首选的文件格式,原因在于它的稳定性、跨平台特性以及统一的显示效果。但是,对于任何需要公开或正式发布的文档,确保其内容的准确性是至关重要的,这就是PDF校对显得尤…...
低代码解放生产力,助力企业高效发展
近年来,随着数字化转型的推进,企业对于软件开发的需求日益显著。然而,传统的软件开发模式通常需要耗费大量时间和资源,限制了企业的快速响应能力。为了解决这一难题,低代码开发平台应运而生,成为企业和开发…...
【前端从0开始】CSS——9、浮动
1. 浮动(float) 1.1 定义 float 属性定义元素向哪个方向浮动。之前这个属性应用于图像,使文本围绕在图像周围,不过在 CSS 中,任何元素都可以浮动。浮动元素会生成一个块级框,不论它本身是何种元素。 取值…...
如何在Moonriver网络上向社区代表委托投票权利
我们之前介绍了「社区代表」这一概念,想必大家对社区代表在治理中扮演的角色和地位有了一定的了解。 本文将介绍如何将您的投票权利委托给社区代表。请注意,在委托Token给社区代表这一过程中,并非将您的Token转移给任何人,而且此…...
时序预测 | MATLAB实现基于CNN-GRU卷积门控循环单元的时间序列预测-递归预测未来(多指标评价)
时序预测 | MATLAB实现基于CNN-GRU卷积门控循环单元的时间序列预测-递归预测未来(多指标评价) 目录 时序预测 | MATLAB实现基于CNN-GRU卷积门控循环单元的时间序列预测-递归预测未来(多指标评价)预测结果基本介绍程序设计参考资料 预测结果 基本介绍 MATLAB实现基于CNN-GRU卷积…...
【李群李代数】李群控制器(lie-group-controllers)介绍——控制 SO(3) 空间中的系统的比例控制器Demo...
李群控制器SO(3)测试 测试代码是一个用于控制 SO(3) 空间中的系统的比例控制器。它通过计算控制策略来使当前状态逼近期望状态。该控制器使用比例增益 kp 进行参数化,然后进行一系列迭代以更新系统状态,最终检查状态误差是否小于给定的阈值。这个控制器用…...
DP读书:鲲鹏处理器 架构与编程(六)PCI Express 总线
处理器与服务器:PCI Express 总线 PCI Express 总线1. PCI Express 总线的特点a. 高速差分传输b. 串行传输c. 全双工端到端连接d. 基于多通道的数据传输方式e. 基于数据包的传输 2. PCI Express 总线的组成与拓扑结构a. 根复合体b. PCI Express桥c. 功能单元 3. PCI…...
Pyqt5-开源工具分解功能(文本拖拽)
开源第四篇:功能实现之拖拽功能与配置文件。 写这个功能的初衷,是因为,每次调试我都要手动敲命令,太麻烦了,想偷个懒,所以直接给这功能加上了,顺便衍生出了另一个想法,配置文件自动填写相关数据。 先看个简单的拖拽功能: 很明显吧,还是比较便捷的。所以我们本章,就在…...
Java版B/S架构 智慧工地源码,PC、移动、数据可视化智慧大屏端源码
智慧工地是什么?智慧工地主要围绕绿色施工、安全管控、劳务管理、智能管理、集成总控等方面,帮助工地解决运营、管理方面各个难点痛点。在互联网的加持下促进项目现场管理的创新与发展,实现工程管理人员与工程施工现场的整合,构建…...
无涯教程-PHP - Session选项
从PHP7 起, session_start()()函数接受一系列选项,以覆盖在 php.ini 中设置的会话配置指令。这些选项支持 session.lazy_write ,默认情况下此函数为on,如果会话数据已更改,则会导致PHP覆盖任何会话文件。 添加的另一个…...
The Age of Data and AI: Challenges and Opportunities
Simply put Abstract: This paper examines the impact of the “Age of Data” on the field of artificial intelligence (AI). With the proliferation of digital technologies and advancements in data collection, storage, and processing, organizations now have ac…...
WPF 项目中 MVVM模式 的简单例子说明
一、概述 MVVM 是 Model view viewModel 的简写。MVVM模式有助于将应用程序的业务和表示逻辑与用户界面清晰分离。 几个概念的说明: model :数据,界面中需要的数据,最好不要加逻辑代码view : 视图就是用户看到的UI结构 xaml 文件viewModel …...
基于nginx禁用访问ip
一、背景 网络安全防护时,禁用部分访问ip,基于nginx可快速简单实现禁用。 二、操作 1、创建 conf.d文件夹 在nginx conf 目录下创建conf.d文件夹 Nginx 扩展配置文件一般在conf.d mkdir conf.d 2、新建blocksip.conf文件 在conf.d目录新建禁用ip的扩展配置文…...
【第三阶段】kotlin语言的内置函数let
1.使用普通方法对集合的第一个元素相加 fun main() {//使用普通方法对集合的第一个元素相加var list listOf(1,2,3,4,5)var value1list.first()var resultvalue1value1println(result) }执行结果 2.使用let内置函数对集合的第一个元素相加 package Stage3fun main() {//使用…...
【C++入门到精通】C++入门 —— 模版(template)
阅读导航 前言一、模版的概念二、函数模版1. 函数模板概念2. 函数模板定义格式3. 函数模板的原理4. 函数模版的实例化🚩隐式实例化🚩显式实例化 5. 函数模板的匹配原则 三、类模板1. 类模板的定义格式2. 类模板的实例化 四、非类型模板参数1. 概念2. 定义…...
ARM汇编【3】:LOAD/STORE MULTIPLE PUSH AND POP
LOAD/STORE MULTIPLE 有时一次加载(或存储)多个值更有效。为此,我们使用LDM(加载多个)和STM(存储多个)。这些指令有一些变化,基本上只在访问初始地址的方式上有所不同。这是…...
Python之Qt输出UI
安装PySide2 输入pip install PySide2安装Qt for Python,如果安装过慢需要翻墙,则可以使用国内清华镜像下载,输入命令pip install --user -i https://pypi.tuna.tsinghua.edu.cn/simple PySide2,如下图, 示例Demo i…...
【1day】复现泛微OA某版本SQL注入漏洞
目录 一、漏洞描述 二、影响版本 三、资产测绘 四、漏洞复现 一、漏洞描述 泛微e-cology是一款由泛微网络科技开发的协同管理平台,支持人力资源、财务、行政等多功能管理和移动办公。泛微OA存在SQL注入漏洞,攻击者利用Web应用程序对用户输入验证上的疏忽,在输入的数据…...
安卓系列机型-禁止卸载某个APP 防止误卸载软件 无需root权限
安卓系列机型-禁止安装某软件 防止“沉迷游戏的小孩”操作解析_安卓机器的博客-CSDN博客 上一期讲了如何禁止安装某个app。今天讲下如何禁止卸载某app。正好相反的操作。任何操作有利有弊。主要看使用者如何对待使用。 💔💔💔以腾讯的一款游…...
【算法系列篇】二分查找——这还是你所知道的二分查找算法吗?
文章目录 前言什么是二分查找算法1.二分查找1.1 题目要求1.2 做题思路1.3 Java代码实现 2.在排序数组中查找元素的第一个和最后一个位置2.1 题目要求2.2 做题思路2.3 Java代码实现 3.搜索插入位置3.1 题目要求3.2 做题思路3.3 Java代码实现 4.x的平方根4.1 题目要求4.2 做题思路…...
【前端从0开始】JavaSript——分支流程控制
流程控制 在任何一门程序设计语言中,都需要支持满足程序结构 化所需要的三种流程控制: ●顺序控制 ●分支控制(条件控制) ●循环控制 顺序控制:在程序流程控制中,最基本的就是顺序控制。程序会按照自上而下的顺序执行…...
Linux权限
Linux中一切皆文件,那么文件就应该有相对于的类型,而在Linux当中,类型不是直接看后缀来决定的。 -普通文件、文本、可执行、归档文件等d目录b块设备、block、磁盘c字符设备、键盘、显示器p管道文件s网络socket文件l链接文件 link 然后后面的九…...
PMP如何备考?学习方式这里有
预习阶段:强烈建议跟着习课视频学习(自己看书真的很难看懂),初步了解PMBOK,有个大致印象; 精讲阶段:这个时候就需要静下心来深入了解各个知识模块,不仅是看PMBOK,还要尽…...
【Java转Go】快速上手学习笔记(四)之基础篇三
目录 泛型内置泛型的使用切片泛型和泛型函数map泛型泛型约束泛型完整代码 接口反射协程特点WaitGroupgoroutine的调度模型:MPG模型 channel介绍语法:举例:channel遍历基本使用和协程一起使用案例一案例二 select...casemain.go 完整代码 文件…...
vue中form和table标签过长
form标签过长 效果: 代码: <el-form-item v-for"(item,index) in ticketEditTable1" :label"item.fieldNameCn" :propitem.fieldName :key"item.fieldNameCn" overflow"":rules"form[item.fieldName…...
java基础复习(第七日)
java基础复习(七) 1.MQ如何避免消息重复投递或重复消费? 在消息生产时,MQ 内部针对每条生产者发送到消息生成一个 inner-msg-id,作为去重的依据(消息投递失败并重传),避免重复的消息进入队列;…...
day24 | 理论基础、77. 组合
目录: 解题及思路学习 理论基础 回溯的本质是穷举,穷举所有可能,然后选出我们想要的答案,如果想让回溯法高效一些,可以加一些剪枝的操作,但也改不了回溯法就是穷举的本质。 回溯法,一般可以…...
数据结构(1)
数据结构其实就是将数据按照一定的关系组织起来的集合,用于组织和存储数据。 1.数据结构分类 1.逻辑结构 逻辑结构是从具体问题中抽象出来的模型,是抽象意义的结构,按照对象中数据的相互关系进行分类。 1>集合结构:集合结构中…...
10个非常有用的Python库,你知道几个?
整理|TesterHome 这里给大家介绍10个不是最流行但非常有用的Python库,希望可以提供参考帮助。 PyO3 PyO3是一个Rust库,可以让你在Rust中编写Python模块。它可以利用 Rust 的速度和安全性编写高性能的 Python 模块。 https://github.com/PyO3…...
黄聪开发wordpress主题/网站免费网站免费优化优化
git clone -b 分支名 仓库地址 仓库地址:例如http...转载于:https://www.cnblogs.com/butterflybay/p/11272469.html...
个人网站后台管理/深圳推广服务
摘要: 如果想要建立一个可伸缩的高可靠性的网站,就需要了解集群技术(clustering).本文中,Abraham Kang介绍了J2EE集群,怎样实现集群, 并列出Bluestone Total-e-server, Sybase Enterprise Application Server, SilverStream Application Server 和WebLogic Application Server在…...
免费做网站支持绑定/市场营销
在概念艺术中,将抽象概念转化为具体视觉效果,这之间所花的时间越短越好。它适用于所有涉及概念艺术的行业,但在视频游戏行业的快节奏开发流程方面,速度尤为重要。这里将通过为独立游戏 Star Dynasties 制作的数字插图,…...
一般课程网站要怎么做/百度统计代码安装位置
interruptedException: http://blog.csdn.net/srzhz/article/details/6804756 1. 处于sleeping,awaiting,或是倍占用的线程(阻塞状态),中断就会抛出interruptedException: 但是并没有被职位,而且也不会中断…...
北碚网站建设哪家好/外链代发软件
2015-09-09 15:30:24近来,有些win10系统反映自己的电脑在自动更新驱动程序之后,在桌面上点击右键时,发现菜单栏里多出了NVIDIA面板或者AIT催化剂等选项,看着很不舒服。那么,win10系统该如何...2017-03-28 13:48:10电脑…...
中山移动网站建设报价/世界杯大数据
最近在看李沐的实用机器学习课程,讲到regression问题的loss的时候有弹幕问:“为什么要平方?”如果是几年前学生问我这个问题,我会回答:“因为做回归的时候的我们的残差有正有负,取个平方求和以后可以很简单…...