从0开始创建Django项目-基础篇

文章目录

  • 1、安装Django
  • 2、创建项目
  • 3、默认项目的介绍
  • 4、APP
  • 5、快速上手
    • 5.1 写一个页面
    • 5.2 templates模板
    • 5.3 静态文件
      • 5.3.1 static目录
      • 5.3.2 引用静态文件
  • 6、模板语法
  • 7、请求和响应
  • 8、数据库操作
    • 8.1 安装第三方模块
    • 8.2 ORM
    • 8.3 案例:用户管理

1、安装Django

pip install django

安装后会有一个创建Django项目的工具:django-admin
在这里插入图片描述

2、创建项目

(1)django-admin startproject mysite
(2)pycharm专业版也可直接创建

区别:

  • 创建了一个templates目录 【可删除】
  • 在settings.py中’DIRS’: [os.path.join(BASE_DIR, 'templates’)] 【可删除】

3、默认项目的介绍

mysite
├── manage.py        【项目的管理,启动项目、创建app、数据管理】【常用,但不要动】
└── mysite├── __init__.py├── settings.py    【项目配置】【***常修改***】├── urls.py           【URL和函数的对应关系】【***常修改***】├── asgi.py          【接收网络请求】【不要动】异步└── wsgi.py         【接收网络请求】【不要动】同步

4、APP

— 项目— app,用户管理【表结构、函数、HTML模板、CSS】— app,订单管理【表结构、函数、HTML模板、CSS】— app,后台管理【表结构、函数、HTML模板、CSS】— app,网站【表结构、函数、HTML模板、CSS】— app,API【表结构、函数、HTML模板、CSS】…
注意:我们开发比较简洁,用不到多个app,一般情况下,项目下创建1个app即可

创建app:
在这里插入图片描述

├── app01
│   ├── __init__.py
│   ├── admin.py         【固定,不用动】django默认提供了admin后台管理
│   ├── apps.py          【固定,不用动】app启动类
│   ├── migrations       【固定,一般情况下不用动】数据库字段变更记录
│   │   └── __init__.py
│   ├── models.py        【**重要**】对数据库操作
│   ├── tests.py         【固定,不用动】单元测试的
│   └── views.py         【**重要**】函数
├── manage.py
└── mysite├── __init__.py├── asgi.py├── settings.py├── urls.py          【URL->函数】└── wsgi.py

5、快速上手

  • 确保app已注册【settings.py】
    在这里插入图片描述
  • 编写URL和视图函数对应的关系【urls.py】
    在这里插入图片描述
  • 编写视图函数【views.py】
    在这里插入图片描述
  • 启动Django项目
python3 manage.py runserver

5.1 写一个页面

url -> 函数
在这里插入图片描述

5.2 templates模板

在这里插入图片描述

5.3 静态文件

在开发过程中一般将:

  • 图片
  • CSS
  • js

当静态文件处理

5.3.1 static目录

在app目录下创建static文件夹
在这里插入图片描述

5.3.2 引用静态文件

在这里插入图片描述
{% static … %} 就是执行static函数(模板语言)

6、模板语法

本质上:在HTML中写一些占位符,由数据对这些占位符进行替换和处理
在这里插入图片描述
案例:伪新闻中心
在这里插入图片描述

7、请求和响应

在这里插入图片描述
关于重定向:redirect('https://www.baidu.com')
在这里插入图片描述
案例:用户登录
在这里插入图片描述
解决方法:
在这里插入图片描述
在这里插入图片描述

8、数据库操作

  • mMySQL数据库+pymysql
import pymysql# 1.连接MySQL
conn = pymysql.connect(host='localhost', port=3306, user='root', password='19980123', charset='utf8', db='unicom')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)# 2.发送指令(千万不要用字符串的格式化去做SQL的拼接,会有安全隐患SQL注入)
sql = 'insert into admin(username, password, mobile) values(%s, %s, %s)# %s是pymysql里面的占位符,用(%(n1)s, %(n2)s, %(n3)s),表示传字典{'n1': 'Tony', 'n2': 'qw123456', 'n3': '13177778888'}
cursor.execute(sql, ['Lily', '123456', '13888888888'])
conn.commit()# 3.关闭连接
cursor.close()
conn.close()
  • Django开发操作数据库更简单,内部提供了ORM框架
    在这里插入图片描述

8.1 安装第三方模块

pip install mysqlclient

8.2 ORM

ORM可以帮助我们做两件事:

  • 创建、修改、删除数据库中的表(不用写SQL语句) 【无法创建数据库】
  • 操作表中的数据(不用写SQL语句)

(1)自己创建数据库

  • 启动MySQL服务
  • 自带工具创建数据库
create database 数据库名字 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

(2)Django连接数据库
在settings.py文件进行配置和修改

DATABASES = {"default": {"ENGINE": "django.db.backends.mysql","NAME": "django_study",    # 数据库名"USER": "root","PASSWORD": “password","HOST": "127.0.0.1","PORT": "3306",}
}

在这里插入图片描述
(3)Django操作表

  • 创建表
  • 删除表
  • 修改表

创建表:在models.py文件中
在这里插入图片描述
执行命令(app需要提前注册):

python3 manage.py makemigrationspython3 manage.py migrate

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在表中新增列队时,由于已存在列可能已有数据,所以新增列必须要指定新增列对应的数据:

  • 执行python3 manage.py makemigrations命令后选1,手动输入一个值
  • 设置默认值
age = models.IntegerField(default=2)
  • 允许为空
data = models.IntegerField(null=True, blank=True)

(4)操作表中的数据

# 测试Ormond操作表中的数据 2011-11-11 datetime.datetime.now()
# ##### 1.新建 #####
# Department.objects.create(title='人事部', code='101')
# Department.objects.create(title='财务部', code='102')
# Department.objects.create(title='技术部', code='103')# UseInfo.objects.create(username='Tom', password='123', age=20)
# UseInfo.objects.create(username='Jerry', password='123', age=22)
# UseInfo.objects.create(username='Jack', password='123')# ##### 2.删除 #####
# UseInfo.objects.filter(id=1).delete()
# Department.objects.all().delete()# ##### 3.获取数据 #####
# 3.1 获取符合条件的所有数据
# data_list = [行, 行, 行] QuerySet类型
# data_list = UseInfo.objects.all()
# for row in data_list:
#     print(row.id, row.username, row.password, row.age)
# 3.2 获取第一条数据【对象】
# row_obj = UseInfo.objects.filter(id=2).first()
# print(row_obj.id, row_obj.username, row_obj.password, row_obj.age)# ##### 4.更新数据 #####
UseInfo.objects.filter(id=2).update(age=30)

8.3 案例:用户管理

1、展示用户列表
URL
函数

  • 获取所有用户信息
  • HTML渲染
    在这里插入图片描述

2、添加用户
URL
函数

  • GET,看到页面,输入内容
  • POST,提交->写入数据库
    在这里插入图片描述
    3、删除用户
    在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

网络设备 - 这个有点难!

Linux 内核中的网络设备是整个网络通信的核心,它将硬件接口与内核的网络栈连接起来。对于许多初、中级学者而言,理解 Linux 网络设备的概念和工作机制可能显得复杂,但一旦掌握了这些内容,就能更深入地理解内核中的网络操作原理。本…

电商行业财一体化实施案例:如何通过对接实现多组织结算

电商行业财一体化实施案例:如何通过对接实现多组织结算 项目概述: 一家电子商务有限公司,专注于整合线上线下销售渠道,主营业务涵盖化妆品、日用品、乳制品、保健食品等产品的批发与零售。 公司背景与特色 主营业务&#xff1a…

动手学深度学习73 课程总结和进阶学习

1. 课程总结和进阶学习 https://c.d2l.ai/stanford-cs329p/ https://paperswithcode.com https://www.bilibili.com/video/BV1nA41157y4/?vd_sourceeb04c9a33e87ceba9c9a2e5f09752ef8 怎么建立知识库 2. QA 20 算法提取的特征和人的不一样,互补 21 很难预测未…

UE5材质篇 4 材质表面雨滴打落

materials 101的教程的灵感,特此记录一下 教程里本质上其实是先实验确定了湿滑表面的roughness和specular的值metallic这些,然后根据time来给表面的某些点这几个属性进行变换,主要是roughness和normal的变化 具体的变化是依赖了一张noise&a…

【论文分享】三维景观格局如何影响城市居民的情绪

城市景观对居民情绪的影响是近些年来讨论的热门话题之一,现有的研究主要以遥感影像为数据来源,进行二维图像-数据分析,其量化结果精确度有限。本文引入了三维景观格局的研究模型,通过街景图片及网络发帖信息补充图像及数据来源&am…

[代码+论文+讲解]2024数维杯A题:飞机激光测速中的频率估计问题

一、问题背景 空速是飞机相对于空气的速度,是飞行中需要监测的关键参数。空速与飞行状态如攻角和侧偏角密切相关。如果空速数据异常,很容易导致诸如失速等事故。因此,准确测量空速非常重要。 图1:空速激光测速的示意图 激光测速是一种可行的测…

[刷题]入门3.彩票摇奖

博客主页:算法歌者本篇专栏:[刷题]您的支持,是我的创作动力。 文章目录 1、题目2、基础3、思路4、结果 1、题目 链接:洛谷-P2550-彩票摇奖 2、基础 此题目考察数组、三重循环、自增操作的能力。 3、思路 写代码时候&#xf…

数据在内存中的存储

1:整数在内存中的存储 在前面我们已经在操作符那一章博客中引入了,原反补的概念。 正整数的原,反,补码相同。 负整数的三种码表示不同。 2:大小端字节序和字符序判断 1:什么是大小端 很明显&#xff0…

Java线程池:ThreadPoolExecutor原理解析

一、线程池的基本概念 1.1 线程池的定义 线程池是一组预先创建的线程,这些线程可以重复使用来执行多个任务,避免了频繁创建和销毁线程的开销。线程池的核心思想是通过复用一组工作线程,来处理大量的并发任务,减少系统资源消耗&a…

从0开始学习机器学习--Day26--聚类算法

无监督学习(Unsupervised learning and introduction) 监督学习问题的样本 无监督学习样本 如图,可以看到两者的区别在于无监督学习的样本是没有标签的,换言之就是无监督学习不会赋予主观上的判断,需要算法自己去探寻区别,第二张…

网页直播/点播播放器EasyPlayer.js网页web无插件播放器渲染页面出现倒挂的原因排查

EasyPlayer.js网页web无插件播放器属于一款高效、精炼、稳定且免费的流媒体播放器,可支持多种流媒体协议播放,无须安装任何插件,起播快、延迟低、兼容性强,使用非常便捷。 EasyPlayer.js播放器不仅支持H.264与H.265视频编码格式&a…

P3-3.【结构化程序设计】第三节——知识要点:while语句、do-while语句和for语句

视频: P3-3.【结构化程序设计】第三节——知识要点:while语句、do-while语句和for语句 知识要点:while语句、do-while语句和for语句 目录 一、任务分析 二、必备知识与理论 三、任务实施 一、任务分析 输出某班若干学生的成绩&#xff0…

面试时问到软件开发原则,我emo了

今天去一个小公司面试,面试官是公司的软件总监,眼镜老花到看笔记本电脑困难,用win7的IE打开leetcode网页半天打不开,公司的wifi连接不上,用自己手机热点,却在笔记本电脑上找不到。还是我用自己的手机做热点…

【重生之我要苦学C语言】深入理解指针6

深入理解指针6 sizeof和strlen的对比 sizeof 操作符 整型&#xff1a; #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() {int a 10;printf("%zd\n", sizeof(a));printf("%zd\n", sizeof(int));printf("%zd\n", sizeo…

虚拟展厅赋能线上品牌发布会,打造沉浸式体验

线上品牌发布会与虚拟展厅的结合&#xff0c;为企业提供了一个全新的、高效的品牌展示和营销平台。视创云展巧妙融合了3D导览、720全景沉浸体验、虚拟数字人交互、音视频通话以及个性化的互动功能&#xff0c;打造极具沉浸感的线上虚拟品牌发布会&#xff0c;深度赋能体验经济时…

shell编程(3)脚本参数传递与数学运算

声明!!! 学习视频来自B站UP主泷羽sec&#xff0c;如涉及侵权马上删除文章 视频链接&#xff1a;泷羽sec 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负 # 向脚本程序传参 脚本如下&#xff1a; echo 执行的文件名…

CTF-Crypto-affine

首页看描述 一个数学方程和一个flag&#xff0c;应该就是密文构成 y 17x-8 flag{szzyfimhyzd} e一下题目&#xff0c;字典给了一个线索&#xff0c;仿射&#xff0c;那应该就是仿射密码 e一下原理 简单来说&#xff0c;该加密方式&#xff0c;需要两个秘钥来进行加密和解密&a…

YOLOv8改进,YOLOv8结合DynamicConv(动态卷积),CVPR2024,二次创新C2f结构

摘要 大规模视觉预训练显著提高了大规模视觉模型的性能。现有的低 FLOPs 模型无法从大规模预训练中受益。在本文中,作者提出了一种新的设计原则,称为 ParameterNet,旨在通过最小化FLOPs的增加来增加大规模视觉预训练模型中的参数数量。利用 DynamicConv 动态卷积将额外的参…

【AI数字人整合包及教程】EchoMimic:开启数字人新纪元

在当今数字化转型的浪潮中&#xff0c;人工智能技术正以前所未有的速度重塑我们的生活方式。其中&#xff0c;阿里巴巴旗下蚂蚁集团推出的一款名为EchoMimic的开源AI数字人项目&#xff0c;正在引领一场前所未有的技术革命。本文将深入探讨EchoMimic的技术特点&#xff0c;与其…

linux逻辑卷练习

目录 知识点&#xff1a; 常用命令 题目&#xff1a; 解题&#xff1a; 1&#xff09;分区 2&#xff09;创建物理卷 3&#xff09;创建卷组 4&#xff09;生成逻辑卷 "要带参数 -n" 5&#xff09;扩容 6&#xff09;格式化(添加文件系统) 7&#xff09;挂…