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.生成数据库的表

  1. 登录数据库:mysql -u root -p

格式:mysql [-h 主机名] -u 用户名 -p密码 [-P端口号] [-D数据库名]

参数选项:

[-h主机名或ip地址]或者[–host=主机名ip地址]:指定登录的主机名;

[-u用户名]或者[–user=用户名]:指定用户登录的用户名;

[-p密码(p小写)]或者[–password=密码]:输入登录密码;

[-P端口号(P大写)]或者[–port=端口号]:指定登录的MySQL的端口号;

[-D数据库名]或者[–database=数据库名]:指定登录的数据库名称;

登录本地数据库,只需要指定用户名(-u)和密码(-p)即可,不需要指定主机名(-h)

  1. 创建数据库:

create database day16 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

查看所有数据库:

show databases;

  1. 在Djangoh中修改配置文件,连接数据库

在setting.py中修改数据库配置:

DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'django',  # 数据库名字'USER': 'root','PASSWORD': '123456','HOST': '127.0.0.1',  # 要连接哪台机器上的MySQL'PORT': '3306'  # 端口号}
}
  1. 通过Django命令去生成数据库表,或者通过tools>run manage.py task

python manage.py makemigrations

python manage.py migrate

查看生成的表:

use 数据名;
show tables;
desc app01_department;

  1. 创建静态文件(static>css/js/img/plugins)和模板文件templates

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()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/45003.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mongodb.使用自带命令工具导出导入数据

在一次数据更新中&#xff0c;同事把老数据进行了清空操作&#xff0c;但是新的逻辑数据由于某种原因&#xff08;好像是她的电脑中病毒了&#xff09;&#xff0c;一直无法正常连接数据库进行数据插入&#xff0c;然后下午2点左右要给甲方演示&#xff0c;所以要紧急恢复本地的…

深入理解SSO原理,项目实践使用一个优秀开源单点登录项目(附源码)

深入理解SSO原理,项目实践使用一个优秀开源单点登录项目(附源码)。 一、简介 单点登录(Single Sign On),简称为 SSO。 它的解释是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。 ❝ 所谓一次登录,处处登录。同样一处退出,处处退出。 ❞ 二…

【Android Studio】 win11 安装配置 jdk17 超详细

概述 一个好的安装教程能够帮助开发者完成更便捷、更快速的开发。书山有路勤为径&#xff0c;学海无涯苦作舟。我是秋知叶i、期望每一个阅读了我的文章的开发者都能够有所成长。 一、下载JDK JDK官网 这里下载 JDK17 windows x64 installer 二、安装JDK 双击打开下载的 j…

17-工程化开发 脚手架 Vue CLI

开发Vue的两种方式: 1.核心包传统开发模式: 基于 html/css /js 文件&#xff0c;直接引入核心包&#xff0c;开发 Vue。 2.工程化开发模式: 基于构建工具 (例如: webpack)的环境中开发 Vue。 问题: 1. webpack 配置不简单 2. 雷同的基础配置 3. 缺乏统…

Redis——set类型详解

概要 Set&#xff08;集合&#xff09;&#xff0c;将一些有关联的数据放到一起&#xff0c;集合中的元素是无序的&#xff0c;并且集合中的元素是不能重复的 之前介绍的list就是有序的&#xff0c;对于列表来说[1, 2, 3] 和 [2, 1, 3]是两个不同的列表&#xff0c;而对于集合…

ansible(2)-- ansible常用模块

部署ansible&#xff1a;ansible&#xff08;1&#xff09;-- 部署ansible连接被控端_luo_guibin的博客-CSDN博客 目录 一、ansible常用模块 1.1 ping 1.2 command 1.3 raw 1.4 shell 1.5 script 1.6 copy 1.7 template 1.8 yum 11.0.1.13 主控端(ansible)11.0.1.12 被控端(k8s…

如何在 3Ds Max 中准确地将参考图像调整为正确的尺寸?

您是否想知道如何在 3Ds Max 中轻松直观地调整参考图像的大小&#xff0c;而无需借助第三方解决方案、插件或脚本&#xff1f; 我问自己这个问题&#xff0c;并高兴地发现了FFD Box 2x2x2&#xff0c;我无法停止钦佩这个修改器的多功能性。 在本文中&#xff0c;我想与您分享一…

第一百三十三天学习记录:数据结构与算法基础:串、数组和广义表(串Ⅱ)(王卓教学视频)

注&#xff1a;在之前学习C语言的时候&#xff0c;了解过这一块。其中对KMP算法进行了自学&#xff0c;前面的学习记录也有提到过。这一次根据视频教学再系统性的学习学习一次。 串的模式匹配算法 KMP算法

百日筑基篇——Linux中文本工具应用(Linux入门六)

百日筑基篇——Linux中文本工具应用&#xff08;Linux入门六&#xff09; 文章目录 前言一、文本搜索工具 **grep**二、流式文本处理工具 **sed**三、文本处理工具 **awk**总结 前言 在Linux中&#xff0c;通常会使用一些工具来处理文本以获得所需的内容。而Linux中的文本处理…

回归预测 | MATLAB实现IPSO-SVM改进粒子群优化算法优化支持向量机多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现IPSO-SVM改进粒子群优化算法优化支持向量机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现IPSO-SVM改进粒子群优化算法优化支持向量机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xf…

步步向前,曙光已现:百度的大模型之路

大模型&#xff0c;是今年全球科技界最火热&#xff0c;最耀眼的关键词。在几个月的狂飙突进中&#xff0c;全球主要科技公司纷纷加入了大模型领域。中国AI产业更是开启了被戏称为“百模大战”的盛况。 但喧嚣与热闹之后&#xff0c;新的问题也随之而来&#xff1a;大模型的力量…

谈谈召回率(R值),准确率(P值)及F值

通俗解释机器学习中的召回率、精确率、准确率&#xff0c;一文让你一辈子忘不掉这两个词 赶时间的同学们看这里&#xff1a;提升精确率是为了不错报、提升召回率是为了不漏报 先说个题外话&#xff0c;暴击一下乱写博客的人&#xff0c;网络上很多地方分不清准确率和精确率&am…

TIA博途_通过EXCEL快速给PLC程序段添加注释信息的方法示例

通过EXCEL快速给PLC程序段添加注释信息的方法示例 如下图所示,以OB1为例,正常情况下,我们可以在博途中直接输入各个程序段的注释信息, 但是如果程序段较多的话,逐个输入的话效率不高,此时可以参考下面这种通过EXCEL进行快速添加的方法。 如下图所示,选中某个OB或FC、FB块…

c语言实现MD5算法

MD5加密 文章目录 MD5加密MD5介绍应用场景代码分析 &#xff08;基于qt5.14.2&#xff09;测试记录 MD5介绍 1。 一种单向加密算法&#xff0c;即对明文加密&#xff0c;而不能通过密文得到明文。对原数据的任何改动&#xff0c;哪怕是1字节&#xff0c;得到的MD5值都有很大的区…

算法:滑动窗口解决连续区间子数组问题

文章目录 实现原理实现思路典型例题长度最小的子数组无重复字符的最小字串最大连续1的个数III将x减到0的最小操作水果成篮找到字符串中所有字母异位词(哈希表比较优化)对哈希表内元素比较的优化 总结 本篇积累的是滑动窗口的问题&#xff0c;滑动窗口在算法实现中有重要作用&am…

自动驾驶仿真:基于Carsim开发的加速度请求模型

文章目录 前言一、加速度输出变量问题澄清二、配置Carsim动力学模型三、配置Carsim驾驶员模型四、添加VS Command代码五、Run Control联合仿真六、加速度模型效果验证 前言 1、自动驾驶行业中&#xff0c;算法端对于纵向控制的功能预留接口基本都是加速度&#xff0c;我们需要…

pandas数据分析40——读取 excel 合并单元格的表头

案例背景 真的很容易疯....上班的单位的表格都是不同的人做的&#xff0c;所以就会出现各种合并单元格的情况&#xff0c;要知道我们用pandas读取数据最怕合并单元格了&#xff0c;因为没规律...可能前几列没合并&#xff0c;后面几列又合并了....而且pandas对于索引很严格&am…

地球IT

地球是我们生活的家园&#xff0c;也是人类发展的基地。地球不仅仅是一个行星&#xff0c;更是一个复杂而有机的生态系统。 地球直径约为12,742公里&#xff0c;被称为“蓝色星球”&#xff0c;因为它的表面约70%被水覆盖。海洋是地球上最大的生态系统之一&#xff0c;它们扮演…

JavaScript对象知识总结

一、创建对象的三种方式 1、字面量创建对象 2、new关键字&#xff0b;构造函数创建对象 3、Object.create()创建对象 二、查看对象属性和更改对象值的两种方式 1、形如&#xff1a;obj.keyvalue 2、形如&#xff1a;obj[key]value 三、删除对象属性 1、delete obj.key …

计算机竞赛 图像检索算法

文章目录 1 前言2 图像检索介绍(1) 无监督图像检索(2) 有监督图像检索 3 图像检索步骤4 应用实例5 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 图像检索算法 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff…