初始Django
初始Django
一、Django的历史
Django 是从真实世界的应用中成长起来的,它是由堪萨斯(Kansas)州 Lawrence 城中的一个网络开发小组编写的。它诞生于 2003 年秋天,那时 Lawrence Journal-World 报纸的程序员 Adrian Holovaty 和 Simon Willison 开始用 Python 来编写程序。
当时他们的 World Online 小组制作并维护当地的几个新闻站点,并在以新闻界特有的快节奏开发环境中逐渐发展。这些站点包括有 LJWorld.com、Lawrence.com 和 KUsports.com,记者(或管理层) 要求增加的特征或整个程序都能在计划时间内快速的被建立,这些时间通常只有几天或几个小时。因此,Adrian 和 Simon 开发了一种节省时间的网络程序开发框架,这是在截止时间前能完成程序的唯一途径。
2005 年的夏天,当这个框架开发完成时,它已经用来制作了很多个 World Online 的站点。当时 World Online 小组中的 Jacob Kaplan-Moss 决定把这个框架发布为一个开源软件。
从今往后数年,Django是一个有着数以万计的用户和贡献者,在世界广泛传播的完善开源项目。原来的World Online的两个开发者(Adrian and Jacob)仍然掌握着Django,但是其发展方向受社区团队的影响更大。
这些历史都是相关联的,因为她们帮助解释了很重要的两点。
第一,Django最可爱的地方。Django 诞生于新闻网站的环境中,因此它提供很多了特性(如管理后台),非常适合内容类的网站(不要看到这就感到沮丧,尽管Django擅长于动态内容管理系统,但并不表示Django主要的目的就是用来创建动态内容的网站。某些方面特别高效与其他方面不高效是有区别的,Django在其他方面也同样高效。)
第二,Django的起源造就了它的开源社区的文化。因为Django来自于真实世界中的代码,而不是来自于一个科研项目或者商业产品,她主要集中力量来解决Web开发中遇到的问题,同样也是Django的开发者经常遇到的问题。这样,Django每天在现有的基础上进步。框架的开发者对于让开发人员节省时间,编写更加容易维护的程序,同时保证程序运行的效率具有极大的兴趣。无他,开发者动力来源于自己的目标:节省时间,快乐工作。
二、Django介绍
Django是由Python编写的Web框架,遵循 MVC 设计模式。MVC是Model、View、Controller三个单词的简写,分别代表模型、视图、控制器。Django其实也是一个MTV 的设计模式。MTV是Model、Template、View三个单词的简写,分别代表模型、模版、视图。但是在Django中,控制器接受用户输入的部分由框架自行处理,所以 Django 里更关注的是模型(Model)、模板(Template)和视图(Views),称为 MTV模式。
Django 框架的核心组件有:
- 用于创建模型的对象关系映射
- 为最终用户设计较好的管理界面
- URL 设计
- 设计者友好的模板语言
- 缓存系统
三、Django的架构模式
MVC架构模式
mvc是由美国的施乐公司(代表产品是打印机、复印机产业)旗下的帕罗奥多研究中心一位程序员发明了smalltalk语言(第二个面向对象的语言),simula67(第一个面向对象的语言)
MVC的产生理念:分开。专门的人做专门的事(像公司中各部门一样,不同的部门做着不同的事)
MVC的核心思想:解藕。(例如:电脑硬盘坏了,不需要把整个电脑换掉,只需要把硬盘换了,就可以正常使用了。)
MVC是一种使用MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式:
- M为Model(模型), 主要是对数据库的交互,对数据库中的数据进行增删改查操作。
- V为View,主要是用于封装,来生成展示给浏览器的html用户
- C为Controll,主要是用于接受请求,处理业务逻辑,返回结果,与Model和View交互调度
MVT架构模式
Django在处理的过程中,对于经典的MVC处理模式并不是非常认同,在实际项目开发过程中控制器Controller起到的作用非常的有限,所以Django将控制器部分也进行了封装,但是同时扩展了视图View部分,增加了模板功能实现了前端网页的复用,所以Django的架构模式更加符合MVT处理模式
- M:model数据模型
- V:View视图
- T:Template模板
安装Django
一、虚拟环境简介
1、什么是虚拟环境?
虚拟环境是用于依赖项管理和项目隔离的Python工具,允许Python站点包(第三方库)安装在本地特定项目的隔离目录中,而不是全局安装。
2、为什么需要虚拟环境?
我们所有的第三方包安装都是直接通过pip install xx
的方式进行安装的,这样安装会将那个包安装到你的系统级的Python
环境中。但是这样有一个问题,就是如果你现在用Django 2.1.x
写了个网站,然后你的领导跟说,之前有一个旧项目是用Django 1.11.x
开发的,让你来维护,两个版本的django,有些语法上的差异,可能会导致维护旧项目会出问题,这个时候,就可以通过虚拟环境来解决这个问题。
3、常用的虚拟环境
virtualenv、venv、conda
windows下安装virtualenv
pip install virtualenv
pip install virtualenvwrapper-win
virtualenv创建虚拟环境时,目录是创建在C盘下的用户文件夹下,不方便管理,可以通过更改配置,来更改默认创建位置
二、更改虚拟环境默认创建位置
添加环境变量
此电脑–>右键属性–>高级系统设置–>高级–>环境变量–>新建,在弹出的对话框中,输入以下内容
变量名:WORKON_HOME
变量值:d:\myenv
变量值后面跟的是一个文件夹的路径
在python的scripts下,找到mkvirtualenv.bat
修改其中第24行内容
修改红色方框中,=号后面的内容为环境变量中变量值的内容
三、virtualenv使用
-
创建虚拟环境
# mkvirtualenv 环境名 mkvirtualenv my_env
创建好的虚拟环境,默认已经在虚拟环境当中,不需要再次进入
-
进入虚拟环境
# workon 环境名 workon my_env
-
退出虚拟环境
deactivate
-
删除虚拟环境
# rmvirtualenv 环境名 rmvirtualenv my_env
-
列出所有的虚拟环境
lsvirtualenv
-
创建虚拟环境的时候指定
Python
版本mkvirtualenv my_env --python==d:\Program Files\Python39\python.exe
四、安装Django
# 创建虚拟环境
mkvirtualenv mydj32# 进入虚拟环境
workon mydj32# 在虚拟环境中不指定版本,直接安装,默认安装最新版
pip install django # [安装最新版本的django, 生产环境当中不适用]# 安装指定版本的Django
pip install django==3.2.18 # 安装3.2版本当中最新版本# 如果安装速度慢,可以使用国内镜像安装
pip install django==3.2.18 -i https://pypi.douban.com/simple/
创建项目
1、使用命令创建项目
1)、 使用命令创建项目
# cd 进入到要创建项目的目录下 D:\mycodes\django_codeD:\mycodes\django_code># 进入虚拟环境 workon myenv
D:\mycodes\django_code>workon mydj32
(mydj32) D:\mycodes\django_code># 使用命令创建项目
(mydj32) D:\mycodes\django_code>django-admin startproject mysite
2)、 项目目录介绍
mysite__init__.pyasgi.pysettings.py # 项目的整体配置文件urls.py # 项目的URL配置文件wsgi.py # 项目与WSGI兼容的Web服务器入口
manage.py # 项目管理文件,通过它管理项目
3)、启动项目
# 启动项目的命令
python manage.py runserver # http://127.0.0.1:8000 默认启动IP和端口# 批定IP和端口启动项目
python manage.py runserver 192.168.31.100:8080
2、创建子应用
Django的视图编写都在子应用中完成,在web应用中,通常有一些业务功能模块是在不同的项目中都可以复用的,故在开发中通常将工程项目拆分为不同的子功能模块,各功能模块间可以保持相对的独立。
创建app
# 使用命令创建应用 python manage.py startapp app_name
python manage.py startapp equipment
子应用目录文件说明
equipmentmigrations # 存放数据库迁移历史文件__init__.pyadmin.py # 网站的后台管理站点配置相关apps.py # 当前子应用的相关信息models.py # 用户保存数据库模型类tests.py # 开发测试用例,编写单元测试views.py # 编写Web应用视图函数
3、settings.py配置
# 项目所在的目录的根目录
BASE_DIR = Path(__file__).resolve().parent.parent# 项目创建时生成的密钥
SECRET_KEY = 'django-insecure-8!&bnte&q$2g$a%xfds8)-5^1#@ora4)d**%=n59^@7^v7#1wl'# 允许连接的主机
ALLOWED_HOSTS = []# 应用列表
INSTALLED_APPS = [# 前6项为项目默认的应用'django.contrib.admin', # django后端管理应用'django.contrib.auth', # django认证应用'django.contrib.contenttypes','django.contrib.sessions', # django的session应用'django.contrib.messages', # django的消息应用'django.contrib.staticfiles', # django的静态文件# 自建app'equipment.apps.EquipmentConfig',
]# 中间件
MIDDLEWARE = ['django.middleware.security.SecurityMiddleware','django.contrib.sessions.middleware.SessionMiddleware','django.middleware.common.CommonMiddleware','django.middleware.csrf.CsrfViewMiddleware','django.contrib.auth.middleware.AuthenticationMiddleware','django.contrib.messages.middleware.MessageMiddleware','django.middleware.clickjacking.XFrameOptionsMiddleware',
]# 根路由
ROOT_URLCONF = 'mysite.urls'# 数据库配置
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'mysite','USER': 'root','PASSWORD': 'Root@1234','HOST': '127.0.0.1','PORT': 3307,}
}# 密码验证
AUTH_PASSWORD_VALIDATORS = [{'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',},{'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',},{'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',},{'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',},
]# 语言时区设置
LANGUAGE_CODE = 'zh-hans'TIME_ZONE = 'Asia/Shanghai'USE_I18N = TrueUSE_L10N = TrueUSE_TZ = False# 静态文件路由
STATIC_URL = '/static/'
请求和响应
1、基于模板的第一个Hello World
1. 编写FBV视图
from django.shortcuts import render# Create your views here.def index(request):return render(request, 'equipment/index.html')
2. 编写index.html内容
应用equipment下新建templates文件夹,在templates下新建equipment文件夹,在app同名的目录下新建index.html,写入如下内容:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>第一个Hello World</title>
</head>
<body><h1>Hello world!!</h1>
</body>
</html>
3. 配置路由
在应用equipment下新建urls.py文件,配置如下内容:
from django.urls import path # 导入django的path函数
from . import views # 导入应用下的views.py这个文件app_name = 'equipment' # app的名称# 路由配置列表
urlpatterns = [path('', views.index, name='index')
]
4. 配置主路由
from django.contrib import admin
from django.urls import path, includeurlpatterns = [path('admin/', admin.site.urls),path('equip/', include('equipment.urls')),
]
5. 访问页面效果展示
2、基于Json的第一个Hello world
1. 编写视图
不指定请求方式的话, 默认为GET请求
from django.http.response import JsonResponsedef index_api(request):return JsonResponse({'message': 'success','code': 200,'data': 'Hello World!!'})
2. 配置路由
from django.urls import path
from . import viewsapp_name = 'equipment'urlpatterns = [path('index_api/', views.index_api),
]
3. json请求效果展示
3、基于CBV的第一个请求
1. 编写请求视图
类视图在编写请求函数时,需要指定请求方式。如: get\post\put\delete\head等
from django.shortcuts import render
from django.views import Viewclass IndexView(View):"""首页"""def get(self, request):return render(request, 'equipment/index.html')
2. 配置路由
from django.urls import path
from . import viewsapp_name = 'equipment'urlpatterns = [path('index/', views.IndexView.as_view()),
]
3. 页面效果展示
相关文章:

初始Django
初始Django 一、Django的历史 Django 是从真实世界的应用中成长起来的,它是由堪萨斯(Kansas)州 Lawrence 城中的一个网络开发小组编写的。它诞生于 2003 年秋天,那时 Lawrence Journal-World 报纸的程序员 Adrian Holovaty 和…...

leetcode56--合并区间
题目描述 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。 示例 1: 输入:interv…...

赋能数据库智能托管,Akamai 发布首款云计算业务线产品!
为了尽可能地简化数据库管理的复杂性,降低数据库成本,Akamai 在近期推出了首款 DBaaS(数据库即服务)产品——Linode Managed Database。这一数据库产品是 Akamai 自3月份收购 Linode 后发布的首款计算业务线产品。 一、更易用的数…...

Go语言系统学习笔记(三):杂项篇
1. 写在前面 公司的新业务开发需要用到go语言,虽然之前没接触过这门语言,但在大模型的帮助下,边看项目边写代码也能进行go的项目开发,不过,写了一段时间代码之后,总感觉对go语言本身,我的知识体…...

黄仁勋炉边对话:创业的超能力与英伟达的加速计算之旅
在TiECon 2024大会上,英伟达的创始人兼CEO黄仁勋与风投公司Mayfield的管理合伙人纳文查德哈进行了一场深入的炉边对话。黄仁勋不仅分享了英伟达的创业故事,还谈到了他对创业和加速计算的深刻见解。下面是我对这次对话的总结,希望能给正在创业…...

.NET开源、功能强大、跨平台的图表库LiveChart2
LiveCharts2 是 从LiveCharts演变而来,它修复了其前身的主要设计问题,它专注于在任何地方运行,提高了灵活性,并继承LiveCharts原有功能。 极其灵活的数据展示图库 (效果图) 开始使用 Live charts 是 .Net 的跨平台图表库,请访问 https://livecharts.dev 并查看目标平…...

疯狂学英语
我上本科的时候,学校出国留学的气氛不浓厚,我们班只有一名同学有出国留学的倾向,我们宿舍八个人没有一个考虑过留学。 只有小昊,在本校上了研究生之后,不知道受到什么影响,想出国留学。那时候小昊利用一切…...

LeetCode //C - 93. Restore IP Addresses
93. Restore IP Addresses A valid IP address consists of exactly four integers separated by single dots. Each integer is between 0 and 255 (inclusive) and cannot have leading zeros. For example, “0.1.2.201” and “192.168.1.1” are valid IP addresses, bu…...

【数据结构】栈和队列OJ面试题
20. 有效的括号 - 力扣(LeetCode) 思路:由于C语言没有栈的接口,所以我们需要自己造一个“模子”。我们直接copy之前的实现的栈的接口就可以了(可以看我之前的博客【数据结构】栈和队列-CSDN博客copy接口)&…...

【联邦学习——手动搭建简易联邦学习】
1. 目的 用于记录自己在手写联邦学习相关实验时碰到的一些问题,方便自己进行回顾。 2. 代码 2.1 本地模型计算梯度更新 # 比较训练前后的参数变化 def compare_weights(new_model, old_model):weight_updates {}for layer_name, params in new_model.state_dic…...

Springboot项目如何创建单元测试
文章目录 目录 文章目录 前言 一、SpringBoot单元测试的使用 1.1 引入依赖 1.2 创建单元测试类 二、Spring Boot使用Mockito进行单元测试 2.1 Mockito中经常使用的注解以及注解的作用 2.2 使用Mockito测试类中的方法 2.3 使用Mockito测试Controller层的方法 2.4 mock…...

Win10 如何同时保留两个CUDA版本并自由切换使用
环境: Win10 专业版 CUDA11.3 CUDA11.8 问题描述: Win10 如何同时保留两个CUDA版本并自由切换 解决方案: 在同一台计算机上安装两个CUDA版本并进行切换可以通过一些环境配置来实现。这通常涉及到管理环境变量,特别是PATH和L…...

实验室纳新宣讲会(java后端)
前言 这是陈旧已久的草稿2021-09-16 15:41:38 当时我进入实验室,也是大二了,实验室纳新需要宣讲, 但是当时有疫情,又没宣讲成。 现在2024-5-12 22:00:39,发布到[个人]专栏中。 实验室纳新宣讲会(java后…...

class常量池、运行时常量池和字符串常量池的关系
类常量池、运行时常量池和字符串常量池这三种常量池,在Java中扮演着不同但又相互关联的角色。理解它们之间的关系,有助于深入理解Java虚拟机(JVM)的内部工作机制,尤其是在类加载、内存分配和字符串处理方面。 类常量池…...

Java | Leetcode Java题解之第88题合并两个有序数组
题目: 题解: class Solution {public void merge(int[] nums1, int m, int[] nums2, int n) {int p1 m - 1, p2 n - 1;int tail m n - 1;int cur;while (p1 > 0 || p2 > 0) {if (p1 -1) {cur nums2[p2--];} else if (p2 -1) {cur nums1[p…...

韵搜坊(全栈)-- 前后端初始化
文章目录 前端初始化后端初始化 前端初始化 使用ant design of vue 组件库 官网快速上手:https://www.antdv.com/docs/vue/getting-started-cn 安装脚手架工具 进入cmd $ npm install -g vue/cli # OR $ yarn global add vue/cli创建一个项目 $ vue create ant…...

Android:资源的管理,Glide图片加载框架的使用
目录 一,Android资源分类 1.使用res目录下的资源 res目录下资源的使用: 2.使用assets目录下的资源 assets目录下的资源的使用: 二,glide图片加载框架 1.glide简介 2.下载和设置 3.基本用法 4.占位符(Placehold…...

conll-2012-formatted-ontonotes-5.0中文数据格式说明
CoNLL-2012 数据格式是用于自然语言处理任务的一种常见格式,特别是在命名实体识别、词性标注、句法分析和语义角色标注等领域。这种格式在 CoNLL-2012 共享任务中被广泛使用,该任务主要集中在语义角色标注上。 CoNLL-2012 数据格式通常包括多列…...

SpringBoot集成Seata分布式事务OpenFeign远程调用
Docker Desktop 安装Seata Server seata 本质上是一个服务,用docker安装更方便,配置默认:file docker run -d --name seata-server -p 8091:8091 -p 7091:7091 seataio/seata-server:2.0.0与SpringBoot集成 表结构 项目目录 dynamic和dyna…...

视觉检测系统,是否所有产品都可以进行视觉检测?
视觉检测系统作为一种先进的质检工具,虽然具有广泛的应用范围,但并非所有产品都适合进行视觉检测。本文将探讨视觉检测系统的适用范围及其局限性。 随着机器视觉技术的快速发展,视觉检测系统已广泛应用于各个行业,为产品质检提供…...

通过金山和微软虚拟打印机转换PDF文件,流程方法及优劣对比
文章目录 一、WPS/金山 PDF虚拟打印机1、常规流程2、PDF文件位置3、严重缺陷二、微软虚拟打印机Microsoft Print to Pdf1、安装流程2、微软虚拟打印机的优势一、WPS/金山 PDF虚拟打印机 1、常规流程 安装过WPS办公组件或金山PDF独立版的电脑,会有一个或两个WPS/金山 PDF虚拟…...

采用java+B/S开发的全套医院绩效考核系统源码springboot+mybaits 医院绩效考核系统优势
采用java开发的全套医院绩效考核系统源码springbootmybaits 医院绩效考核系统优势 医院绩效管理系统解决方案紧扣新医改形势下医院绩效管理的要求,以“工作量为基础的考核方案”为核心思想,结合患者满意度、服务质量、技术难度、工作效率、医德医风等管…...

驱动开发-用户空间和内核空间数据传输
1.用户空间-->内核空间(写) #include<linux/uaccess.h> int copy_from_user(void *to,const void __user volatile*from,unsigned long n) 函数功能:将用户空间数据拷贝到内核空间 参数: to:内核空间首地…...

【408精华知识】速看!各种排序的大总结!
文章目录 一、插入排序(一)直接插入排序(二)折半插入排序(三)希尔排序 二、交换排序(一)冒泡排序(二)快速排序 三、选择排序(一)简单选…...

【STM32 |程序实例】按键控制、光敏传感器控制蜂鸣器
目录 前言 按键控制LED 光敏传感器控制蜂鸣器 前言 上拉输入:若GPIO引脚配置为上拉输入模式,在默认情况下(GPIO引脚无输入),读取的GPIO引脚数据为1,即高电平。 下拉输入:若GPIO引脚配置为下…...

Spring boot使用websocket实现在线聊天
maven依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spr…...

品牌设计理念和logo设计方法
一 品牌设计的目的 设计是为了传播,让传播速度更快,传播效率更高,减少宣传成本 二 什么是好的品牌设计 好的设计是为了让消费者更容易看懂、记住的设计, 从而辅助传播, 即 看得懂、记得住。 1 看得懂 就是让别人看懂…...

Python | Leetcode Python题解之第88题合并两个有序数组
题目: 题解: class Solution:def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:"""Do not return anything, modify nums1 in-place instead."""p1, p2 m - 1, n - 1tail m n - 1whi…...

vscode新版本remotessh服务端报`GLIBC_2.28‘ not found解决方案
问题现象 通过vscode的remotessh插件连接老版本服务器(如RHEL7,Centos7)时,插件会报错,无法连接。 查看插件的错误日志可以看到类似如下的报错信息: dc96b837cf6bb4af9cd736aa3af08cf8279f7685/node: /li…...

盘他系列——oj!!!
1.Openjudge 网站: OpenJudge 2.洛谷 网站: 首页 - 洛谷 | 计算机科学教育新生态 3.环球OJ 网站: QOJ - QOJ.ac 4. 北京大学 OJ:Welcome To PKU JudgeOnline 5.自由OJ 网站: https://loj.ac/ 6.炼码 网站:LintCode 炼码 8.力扣 网站: 力扣 9.晴练网首页 - 晴练网...