初始Django

news2024/11/24 9:04:27

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

在这里插入图片描述

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

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

相关文章

识别AI论文生成内容,降低论文高AI率

AI写作工具能帮我们在短时间内高效生成一篇毕业论文、开通报告、文献综述、任务书、调研报告、期刊论文、课程论文等等&#xff0c;导致许多人开始使用AI写作工具作为撰写学术论文的辅助手段。而学术界为了杜绝此行为&#xff0c;开始使用AIGC检测系统来判断文章是由AI生成还是…

机器学习中的聚类

目录 认识聚类算法 聚类算法API的使用 聚类算法实现流程 聚类算法模型评估 认识聚类算法 聚类算法是一种无监督的机器学习算法。 它将一组数据分成若干个不同的群组&#xff0c;使得每个群组内部的数据点相似度高&#xff0c;而不同群组之间的数据点相似度低。常用的相似…

【3dmax笔记】028:倒角的使用方法

一、倒角描述 在3dmax中创建倒角效果可以通过多种方法实现,以下是几种常见的方法: 使用倒角修改器。首先创建一个图形(如矩形和圆),然后对齐它们,将它们转化为可编辑样条线,并附加在一起,选择要倒角的边缘,然后使用倒角修改器来调整高度、轮廓等参数。使用倒角剖面修…

Davinci工程vBaseEnv模块讲解

配合的模块 要正常使用vBaseEnv模块&#xff0c;要同时使能EcuC、OS、vBRS和vLinkGen模块。 OS是操作系统&#xff0c;除了FBL以外&#xff0c;其他都需要用到OS。 vBaseEnv是基础环境 vBRS是基本运行系统 vLinkGen脚本链接生成器 EcuC是ECU配置 EcuC配置 需要配合vBaseEnv模…

程序员的神奇应用:从代码创造到问题解决的魔法世界之持续集成/持续部署

文章目录 持续集成/持续部署 在软件开发的海洋中&#xff0c;程序员的实用神器如同航海中的指南针&#xff0c;帮助他们导航、加速开发、优化代码质量&#xff0c;并最终抵达成功的彼岸。这些工具覆盖了从代码编写、版本控制到测试和部署的各个环节。 在当今数字化的世界里&…

数字水印 | Arnold 变换的 Python 代码实现

&#x1f96d; 参考博客&#xff1a; Arnold 阿诺德置乱&#xff08;猫脸变换&#xff09;图像盲水印注入预处理&#xff08;Python&#xff09; 1 回顾&#xff1a;Arnold 公式 A r n o l d \mathsf{Arnold} Arnold 变换公式如下&#xff1a; [ x n 1 y n 1 ] [ 1 b a a b…

搜索引擎的设计与实现(二)

目录 3 搜索引擎的基本原理 3.1搜索引擎的基本组成及其功能 l.搜索器 (Crawler) 2.索引器(Indexer) 3.检索器(Searcher) 4.用户接口(UserInterface) 3.2搜索引擎的详细工作流程 4 系统分析与设计 4.1系统分析 4.2系统概要设计 4.2系统实现目标 前面内容请移步 搜索引…

力扣HOT100 - 70. 爬楼梯

解题思路&#xff1a; 动态规划 注意 if 判断和 for 循环 class Solution {public int climbStairs(int n) {if (n < 2) return n;int[] dp new int[n 1];dp[1] 1;dp[2] 2;for (int i 3; i < n; i) {dp[i] dp[i - 1] dp[i - 2];}return dp[n];} }

Co-Driver:基于 VLM 的自动驾驶助手,具有类人行为并能理解复杂的道路场景

24年5月来自俄罗斯莫斯科研究机构的论文“Co-driver: VLM-based Autonomous Driving Assistant with Human-like Behavior and Understanding for Complex Road Scenes”。 关于基于大语言模型的自动驾驶解决方案的最新研究&#xff0c;显示了规划和控制领域的前景。 然而&…

智能组网实施步骤?

随着信息技术的快速发展&#xff0c;智能组网正在逐渐成为各个行业的关注焦点。智能组网通过将各种设备、终端和系统连接起来&#xff0c;实现信息的传输和共享&#xff0c;从而提升工作效率和运营效益。本文将介绍智能组网的实施步骤&#xff0c;以及一家名为【天联】的智能组…

台式电脑屏幕亮度怎么调节?让你的眼睛更舒适!

在日常使用台式电脑时&#xff0c;调节屏幕亮度是一项常见的需求。不同的环境和个人偏好可能需要不同的亮度设置。因此&#xff0c;了解台式电脑屏幕亮度怎么调节是非常重要的。本文将介绍三种常见的方法&#xff0c;帮助您轻松调节台式电脑屏幕亮度&#xff0c;以满足您的需求…

【C++初阶】第十一站:list的介绍及使用

目录 list的介绍及使用 1.list的含义 2.list的介绍 3.list的使用 1.list的构造 2.list iterator的使用 3.list capacity 4.list element access 5 list modifiers 尾插尾删 和 头插头删 insert 和 erase resize swap clear 6.list sort and reverse 7.list copy vector copy li…

数字化转型:超越信息化,构建数字化营销体系!

在数字化的浪潮中&#xff0c;企业仅仅做好信息化数字能力基础已远远不够&#xff01;那么&#xff0c;还需要什么呢&#xff1f;没错&#xff0c;就是在数字化经营思维的指导下&#xff0c;建立起数字化营销体系和执行方案&#xff01;这是企业在数字时代中立于不败之地的关键…

在cmd中,如何使用cd进入指定文件目录

在cmd中&#xff0c;如何使用cd进入指定文件目录 1.要进入的磁盘与当前磁盘一致 例如: cd C:\Program Files (x86)\Google\Chrome\Application 2.进入到其他磁盘&#xff0c; 例如 cd /d D:\JAVA\codes\01\1.4 或者下面的方式&#xff08;直接输入磁盘F&#xff1a;和文件名…

11.php-fpm模板(监控页面取值)

php-fpm模板(监控页面取值) 开启监控页面配置 #修改php配置文件 vim /etc/php-fpm.d/www.conf pm.status_path /php_status#修改nginx配置文件,添加到nginx配置文件中 vim /etc/nginx/conf.d/default.conflocation /php_status {root html;fastcgi_pass 127.0.…

使用单片机的IO引脚直接驱动段码屏

使用单片机的IO引脚直接驱动段码屏,目的是为了降低成本。这种古老的应用,在低功耗产品中比较多见。 如:水表&#xff0c;燃气表等需要电池供电的产品。 下面纯属个人理解&#xff0c;未经测试。 1/3Duty表示LCD共有3个COM引脚,分别占显示周期的1/3 1/2BIAS表示电压0和VCC 1、…

想半天憋不出几个字?试试AI扩写

大家在写文章时是否也经常这样&#xff1f;想了半天&#xff0c;结果只能写出几个字&#xff0c;但是要求往往又是几百多个字&#xff0c;那么有没有啥工具可以帮我们在原文的基础上扩写一下文章字数&#xff0c;让我们达到字数要求呢&#xff1f; 下面给大家介绍一下如何扩写文…

Rpcx (二):传输

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

什么是Data Lakehouse Architecture(DLA)?企业为何要创建DLA

公司捕获和存储的数据比以往任何时候都多&#xff0c;因为它们依赖数据来做出关键的业务决策、改进服务或产品&#xff0c;或为最终用户&#xff08;客户&#xff09;提供更好的服务。了解各种大数据存储技术对于为商业智能&#xff08;BI&#xff09;、数据分析和机器学习&…

山西教育杂志山西教育杂志社山西教育编辑部2024年第4期目录

课题研究 小学语文随堂小练笔策略研究 陈立固; 3-4 儿童戏剧工作坊载体下小学语文戏剧课堂的建构 郭黎明; 5-6《山西教育》投稿&#xff1a;cn7kantougao163.com 文化生态视域下小学英语教学的传统文化融入 周慧娟; 7-8 基于“主题语境”的初中英语课堂教学研究…