初始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_code

D:\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__.py
    asgi.py
    settings.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
子应用目录文件说明
equipment
	migrations		# 存放数据库迁移历史文件
	__init__.py
    admin.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 = True

USE_L10N = True

USE_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, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('equip/', include('equipment.urls')),
]
5. 访问页面效果展示

在这里插入图片描述

2、基于Json的第一个Hello world

1. 编写视图

不指定请求方式的话, 默认为GET请求

from django.http.response import JsonResponse


def index_api(request):
    return JsonResponse({
        'message': 'success',
        'code': 200,
        'data': 'Hello World!!'
    })
2. 配置路由
from django.urls import path
from . import views

app_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 View


class IndexView(View):
    """
    首页
    """

    def get(self, request):
        return render(request, 'equipment/index.html')
2. 配置路由
from django.urls import path
from . import views

app_name = 'equipment'

urlpatterns = [
    path('index/', views.IndexView.as_view()),
]
3. 页面效果展示

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

泽攸科技无掩模光刻机:引领微纳制造新纪元

在当今科技迅猛发展的时代&#xff0c;微纳制造技术正变得越来越重要。泽攸科技作为这一领域的先行者&#xff0c;推出了其创新的无掩模光刻机&#xff0c;这一设备在微电子制造、微纳加工、MEMS、LED、生物芯片等多个高科技领域展现出了其独特的价值和广泛的应用前景。 技术革…

ubuntu中安装sublime-text

安装sublime-text 直接在software软件下载就好 安装成功后&#xff0c;如果找不到的话&#xff0c;可以在这里搜索。而后添加到收藏文件夹中。 下载的时候发生报错&#xff0c;发现是没有安装 ca-certificates 的软件包 &#xff1a; 命令&#xff1a; sudo apt install ca-c…

【NodeMCU实时天气时钟温湿度项目 6】解析天气信息JSON数据并显示在 TFT 屏幕上(心知天气版)

今天是第六专题&#xff0c;主要内容是&#xff1a;导入ArduinoJson功能库&#xff0c;借助该库解析从【心知天气】官网返回的JSON数据&#xff0c;并显示在 TFT 屏幕上。 如您需要了解其它专题的内容&#xff0c;请点击下面的链接。 第一专题内容&#xff0c;请参考&a…

uniapp小程序:大盒子包裹小盒子但是都有点击事件该如何区分?

在开发过程中我们会遇到这种情况&#xff0c;一个大盒子中包裹这一个小盒子&#xff0c;两个盒子都有点击事件&#xff0c;例如&#xff1a; 这个时候如果点击评价有可能会点击到它所在的大盒子&#xff0c;如果使用css中的z-index设置层级的话如果页面的盒子多的话会混乱&…

AI工具的热门与卓越:揭示AI技术的实际应用和影响

文章目录 每日一句正能量前言常用AI工具创新AI应用个人体验分享后记 每日一句正能量 我们在我们的劳动过程中学习思考&#xff0c;劳动的结果&#xff0c;我们认识了世界的奥妙&#xff0c;于是我们就真正来改变生活了。 前言 随着人工智能&#xff08;AI&#xff09;技术的快…

极端天气对气膜建筑有什么影响吗—轻空间

气膜建筑在近年来的发展迅速&#xff0c;逐渐替代了一部分传统建筑&#xff0c;展现了良好的市场前景。然而&#xff0c;面对自然环境中的极端天气&#xff0c;如暴风、暴雨和暴雪&#xff0c;气膜建筑是否能够经受住考验是大家关注的焦点。轻空间带您探讨一下这些极端天气对气…

【漏洞复现】泛微OA E-Cology ResourceServlet文件读取漏洞

漏洞描述&#xff1a; 泛微OA E-Cology是一款面向中大型组织的数字化办公产品&#xff0c;它基于全新的设计理念和管理思想&#xff0c;旨在为中大型组织创建一个全新的高效协同办公环境。泛微OA E-Cology ResourceServlet存在任意文件读取漏洞&#xff0c;允许未经授权的用户…

Nurbs曲线

本文深入探讨了Nurbs曲线的概念、原理及应用&#xff0c;揭示了其在数字设计领域的独特价值和广泛影响。Nurbs曲线作为一种强大的数学工具&#xff0c;为设计师们提供了更加灵活、精确的曲线创建方式&#xff0c;从而极大地提升了设计作品的质感和表现力。文章首先介绍了Nurbs曲…

大数据之 Hadoop概述

用最简洁的语言跟大家表达我最想分享的知识 。 什么是Hadoop Hadoop框架核心模块 HDFS MapReduce Yarn Hive HBase Phoenix Zookeeper Impala Spark 分布式计算-Spark与Impala与Presto与Tez 今天主要跟大家简述一下hadoop&#xff0c;主要是图片的形式跟大家介绍&#xff0c;希…

Rpcx (二):传输

一、Transport 传输 rpcx 可以通过 TCP、HTTP、UnixDomain、QUIC和KCP通信。你也可以使用http客户端通过网关或者http调用来访问rpcx服务。 TCP 这是最常用的通信方式。高性能易上手。可以使用TLS加密TCP流量。 Example: 101basic 服务端使用 tcp 做为网络名并且在注册中心…

稚晖君独家撰文:具身智能即将为通用机器人补全最后一块拼图

具身智能新纪元。 *本文为稚晖君独家供稿,「甲子光年」经智元机器人授权发布。稚晖君本名彭志辉,先后任职OPPO、华为,现为智元机器人CTO、首席架构师。 在ChatGPT之后,又一个大模型概念火了——具身智能(Embodied AI)。 在学术界,图灵奖得主、上海期智研究院院长姚期…

IOS 苹果IAP(内购)之创建沙盒账号

IOS 苹果IAP&#xff08;内购&#xff09;之创建沙盒账号 沙盒账号是什么&#xff1f;沙盒账号创建的前提条件沙盒账号创建沙盒账号使用流程沙盒账号注意事项 沙盒账号是什么&#xff1f; 如果IOS应用里面用到了苹果应用内付费&#xff08;IAP&#xff09;功能&#xff0c;那么…

办公软件_EdrawMax 免安装版教程 (亿图图示综合图形图表设计软件)

前言 万兴亿图图示(Wondershare EdrawMax)是一款综合图形图表设计软件,Visio国产替代.亿图图示中文版(Edraw Max)是一款办公绘图软件的思维导图软件.无需任何绘图功底,即可轻松创建各类思维导图.亿图图示专家,提供大量事例和在线模板,用于创建流程图,信息图,组织结构图,科学教…

面试题:调整数字顺序,使奇数位于偶数前面

题目&#xff1a; 输入一个整数数组&#xff0c;实现一个函数&#xff0c;来调整该数组中数字的顺序 使得所有奇数位于数组的前半部分&#xff0c;所有偶数位于数组的后半部分 算法1&#xff1a; 利用快速排序的一次划分思想&#xff0c;从2端往中间遍历 时间复杂度&#x…

day5

利用迭代器&#xff01; #include <vector> #include <map>class Solution { public:std::vector<int> intersection(std::vector<int>& nums1, std::vector<int>& nums2) {std::map<int, int> Mymap;std::vector<int> qq…

金万维动态域名小助手怎么用?

金万维动态域名小助手是一个域名检测工具&#xff0c;使用此工具可以进行检测域名解析是否正确、清除DNS缓存、修改DNS服务器地址及寻找在线客服&#xff08;仅支持付费用户&#xff09;等操作。对不懂网络的用户是一个很好的检测域名的工具&#xff0c;下面我就讲解一下金万维…

面试中的算法(查找缺失的整数)

在一个无序数组里有99个不重复的正整数&#xff0c;范围是1~100&#xff0c;唯独缺少1个1~100中的整数。如何找出这个缺失的整数? 一个很简单也很高效的方法&#xff0c;先算出1~100之和&#xff0c;然后依次减去数组里的元素&#xff0c;最后得到的差值&#xff0c;就是那个缺…

ARM架构安全特性之通用平台安全服务

安全之安全(security)博客目录导读 目录 一、符合PSA认证标准 二、Arm平台安全规范 三、跨安全边界通信 四、FF-A 五、FF-M 六、开放和标准设备固件 七、Trustedfirmware.org 在一个需要高度信任设备的世界中&#xff0c;每个设备都必须是独一无二的可识别的、不可克隆…

网站服务器备案及域名购买配置教程

一、阿里云服务备案准备工作 1.什么是备案? 备案是指向相关部门提交网站信息,以便监管和管理互联网信息服务,未经备案的网站可能面临罚款甚至被关闭的风险。备案主要看您的网站或App等互联网信息服务解析到的服务器是否在中国内地(大陆),如果服务器在中国内地(大陆),…

携手鲲鹏昇腾 HashData展现云原生数仓创新力量

​5月9日-11日&#xff0c;鲲鹏昇腾开发者大会2024在北京中关村国际创新中心举行&#xff0c;众多行业领袖、专家学者及优秀开发们齐聚一堂&#xff0c;分享产业趋势、技术创新和应用实践。 酷克数据作为华为鲲鹏生态重要合作伙伴&#xff0c;受邀出席本次大会&#xff0c;展示…