初始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. 页面效果展示

在这里插入图片描述

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

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

相关文章

自作聪明的AI? —— 信息处理和传递误区

一、背景 在人与人的信息传递中有一个重要问题——由于传递人主观处理不当&#xff0c;导致信息失真或产生误导。在沟通交流中&#xff0c;确实存在“自作聪明”的现象&#xff0c;即传递人在转述或解释信息时&#xff0c;根据自己对信息的理解、经验以及个人意图进行了过多的…

配置 IDEA 识别自定义规则的 Dockerfile 文件

目录 配置所在位置解决方案其他 配置所在位置 打开 IntelliJ IDEA&#xff0c;然后转到顶部菜单中的 “File” > “Settings”&#xff08;Windows/Linux&#xff09;或 “IntelliJ IDEA” > “Preferences”&#xff08;macOS&#xff09;。 在弹出的设置窗口中&#x…

疯狂学英语

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

[GWCTF 2019]re3

int mprotect(void *addr, size_t len, int prot);实现内存区域的动态权限控制: addr&#xff1a;要修改保护权限的内存区域的起始地址。len&#xff1a;要修改保护权限的内存区域的长度&#xff08;以字节为单位&#xff09;。prot&#xff1a;要设置的新的保护权限&#xff…

在线视频教育平台,基于 SpringBoot+Vue+MySQL 开发的前后端分离的在线视频教育平台设计实现

目录 一. 前言 二. 功能模块 2.1. 用户功能模块 2.2. 管理员功能模块 2.3. 教师功能模块 2.4. 前台首页功能模块 三. 部分代码实现 四. 源码下载 一. 前言 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优…

Golang | Leetcode Golang题解之第88题合并两个有序数组

题目&#xff1a; 题解&#xff1a; func merge(nums1 []int, m int, nums2 []int, n int) {for p1, p2, tail : m-1, n-1, mn-1; p1 > 0 || p2 > 0; tail-- {var cur intif p1 -1 {cur nums2[p2]p2--} else if p2 -1 {cur nums1[p1]p1--} else if nums1[p1] > n…

5.nginx常用命令和日志定时切割

一. nginx常用的相关命令介绍 1.强制关闭nginx: ./nginx -s stop 2.优雅的关闭nginx: ./nginx -s quit 3.检查配置文件是否正确&#xff1a; ./nginx -t 4.查看nginx版本&#xff1a; ./nginx -v 5.查看nginx版本相关的配置环境信息&#xff1a;./nginx -V 6.nginx帮助信…

Java入门1: 基础语法

Java入门1: 基础语法 MangoGO 芒狗狗 目录 1 基础语法1.1 Hello World1.2 常量1.3 数据类型1.4 String1.5 StringBuilder1.6 运算符1.7 位运算符1.8 逻辑运算符1.9 关系运算符1.10 练习&#xff1a;计算数字和1.11 关键字和语句1.12 流程控制1.13 数组1.14 用户输入操作参考代码…

【C++】再识构造函数:初始化列表新方式

欢迎来到CILMY23的博客 &#x1f3c6;本篇主题为&#xff1a; 再识构造函数&#xff1a;初始化列表新方式 &#x1f3c6;个人主页&#xff1a;CILMY23-CSDN博客 &#x1f3c6;系列专栏&#xff1a;Python | C | C语言 | 数据结构与算法 | 贪心算法 | Linux &#x1f3c6;感…

一种快速H.264 NALU快速搜索算法

1. 引言 在播放H.264码流的时候,进行NALU的搜索的效率高低影响着系统的性能。有采用普通逐字节搜索的算法,有利用cpu的simd的单指令多数据操作的并行功能进行搜索的算法,今天要介绍的是一个非常简单而且高效的快速搜索算法,而且不需要利用simd指令,搜索的速度甚至快于我之…

Vue的学习 —— <初识vue>

目录 前言 目标 前端的发展历程 正篇开始——Vue讲解 一、Vue简介 二、Vue特性 1、数据驱动视图 2、双向数据绑定 3、指令 4、插件 三、vue的三大版本 前言 在这个快速迭代的互联网时代&#xff0c;前端技术的发展日新月异&#xff0c;Vue.js的出现无疑为前端开发领…

深度解析Nginx:高性能Web服务器的奥秘(下)

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《洞察之眼&#xff1a;ELK监控与可视化》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、前言 1、Nginx概述 二、Nginx核心功能 1、URL重写与重…

git-将本地项目上传到远程仓库

在gitee中新建一个远程仓库。 填写对应内容。 打开你想上传的文件夹&#xff0c;比如我想上传yuanshen 右击&#xff0c;打开git bash 输入git init初始化仓库 git init 添加项目所有文件 git add . 将添加的文件提交到本地仓库&#xff08;提交说明必填&#xff09; git …

嵌入式CAN通信协议详解分析

CAN协议简介 CAN是控制器局域网络(Controller Area Network)的简称,它是由研发和生产汽车电子产品著称的德国BOSCH公司开发的,并最终成为国际标准(ISO11519),是国际上应用最广泛的现场总线之一。 CAN总线协议已经成为汽车计算机控制系统和嵌入式工业控制局域网的标准总线…

算法课程笔记——自下而上树形DP

算法课程笔记——自下而上树形DP #include<bits/stdc.h>usingnamespacestd; constintN100005; intn,a[N]; longlongdp[N][2]; vector<int> e[N]; voiddfs(intu){for(autov:e[u]){dfs(v);dp[u][1]dp[v][0];dp[u][0]max(dp[v][0],dp[v][1]);}dp[u][1]a[u]; } intmain…

图像分类——猫狗图片

引言 亲爱的读者们&#xff0c;您是否在寻找某个特定的数据集&#xff0c;用于研究或项目实践&#xff1f;欢迎您在评论区留言&#xff0c;或者通过公众号私信告诉我&#xff0c;您想要的数据集的类型主题。小编会竭尽全力为您寻找&#xff0c;并在找到后第一时间与您分享。 …

如何用Rust获取CPU、内存、硬盘的信息?

目录 一、用Rust获取CPU、内存、硬盘的信息 二、知识点 systemstat 一、用Rust获取CPU、内存、硬盘的信息 首先&#xff0c;需要添加systemstat库到Cargo.toml文件&#xff1a; [dependencies] systemstat "0.8.2" 在Rust代码中使用它&#xff1a; extern crat…

新增柱线组合图、象限图,新增钉钉、飞书、企业微信客户端免密登录,DataEase开源数据可视化分析工具v2.6.0发布

2024年5月13日&#xff0c;人人可用的开源数据可视化分析工具DataEase正式发布v2.6.0版本。 这一版本的功能升级包括&#xff1a;图表方面&#xff0c;新增了柱线组合图、象限图&#xff1b;仪表板方面&#xff0c;支持批量拖拽字段&#xff0c;外部参数新增支持配置过滤组件&…

日元崩了:日本上市公司转战比特币作对冲

5月13日&#xff0c;日本上市公司Metaplanet发布公告宣布因为政府债务水平高企、实际利率长期处于负值以及日元贬值&#xff0c;Metaplanet特将比特币作为其公司战略储备资产&#xff0c;以回应日本严峻的经济形势。同时也为当地资产管理领域的企业创新开创了先例。 Metaplanet…

强化学习——马尔可夫奖励过程的理解

目录 一、马尔可夫奖励过程1.回报2.价值函数 参考文献 一、马尔可夫奖励过程 在马尔可夫过程的基础上加入奖励函数 r r r 和折扣因子 γ \gamma γ&#xff0c;就可以得到马尔可夫奖励过程&#xff08;Markov reward process&#xff09;。一个马尔可夫奖励过程由 < S , …