Python进阶篇(一)-- Django快速上手

news2024/11/26 6:12:40

1 Django概述

        Web框架,就是用于开发Web服务器端应用的基础设施,说得通俗一点就是一系列封装好的模块和工具。事实上,即便没有Web框架,我们仍然可以通过socket或CGI来开发Web服务器端应用,但是这样做的成本和代价在商业项目中通常是不能接受的。通过Web框架,我们可以化繁为简,降低创建、更新、扩展应用程序的工作量。刚才我们说到Python有上百个Web框架,这些框架包括Django、Flask、Tornado、Sanic、Pyramid、Bottle、Web2py、web.py等。

        在上述Python的Web框架中,Django无疑是最有代表性的重量级选手,开发者可以基于Django快速的开发可靠的Web应用程序,因为它减少了Web开发中不必要的开销,对常用的设计和开发模式进行了封装,并对MVC架构提供了支持(Django中称之为MTV架构)。MVC是软件系统开发领域中一种放之四海而皆准的架构,它将系统中的组件分为模型(Model)、视图(View)和控制器(Controller)三个部分并借此实现模型(数据)和视图(显示)的解耦合。由于模型和视图进行了分离,所以需要一个中间人将解耦合的模型和视图联系起来,扮演这个角色的就是控制器。稍具规模的软件系统都会使用MVC架构(或者是从MVC演进出的其他架构),Django项目中我们称之为MTV,MTV中的M跟MVC中的M没有区别,就是代表数据的模型,T代表了网页模板(显示数据的视图),而V代表了视图函数,在Django框架中,视图函数和Django框架本身一起扮演了MVC中C的角色。

  • 模型:在程序中用于处理数据逻辑的部分,大部分情况下是对数据库的增删改查的操作;
  • 视图:该层包含存取模型及调取恰当模板的相关逻辑。用于封装负责处理用户请求及返回响应的逻辑;
  • 模板 :用于处理用户显示部分的内容,和 MVC 中的 V 是一样的,通过 HTML 展示。它使用模板方法可以动态地生成 HTML。模板包含所需 HTML 输出的静态部分,以及一些特殊的语法,描述如何将动态内容插入。

        MTV 和 MVC 模式并没有本质上的区别,都是为了实现应用的解耦,只是定义上有些不同。在 MTV 模式的 Web 框架中,没有 Controll 层,这个是由框架内部实现,我们需要做的就是将 URL 对应到视图即可,通过这样的 URL 配置,系统将一个请求发送到一个合适的视图进行处理。在 Django 框架中就实现了这样一个 URL 分发器,它帮助分发 URL 请求到对应的视图。

Django 框架图示

        Django 框架的核心组件有:

  • 用于创建模型的对象关系映射(ORM);
  • 基于正则表达式的 URL 分发器;
  • 视图系统,用于处理 URL 请求;
  • 模板系统,用于将模板文件转换成 HTML 文件,并在浏览器上显示;
  • 缓存系统,并提供多种缓存方式。

        除此之外 Django 框架中还包括如下功能:

  • 轻量级的、独立的 Web 服务器,用于开发和测试;
  • 表单序列化及验证系统 (Form),用于 HTML 表单和数据库存储的数据之间的转换;
  • 中间过滤组件,允许对请求处理的各个阶段进行干涉;
  • 序列化系统,能够生成或读取采用 XML 或 JSON 表示的 Django 模型实例。

        此外,Django 还内置了许多有用的应用,比如一个可扩展的认证系统、动态站点管理页面等等。Django 前身就是在线新闻站点,因此它是非常适合做 Web 站点开发的。


2 基本使用

2.1 安装Django Web框架

方式一: 使用 pip 安装Django(不推荐)
        在命令行中执行pip install django=-2.0命令,即可安装指定的2.0版本的Django。

方式二: 使用virtualenv安装Django
        在多个项目的复杂工作中,常常会碰到使用不同版本的 Python 包,而虚拟环境则会处理各个包之间的隔离问题。virtualenv 是一种虚拟环境,该环境中可以安装 Django,步骤如下:

方式三: 使用 Anaconda 安装 Django
        Anaconda 也是一种虚拟环境,严格来讲也是一种包管理工具,安装王成输入一下命令创建虚拟环境:

conda create -n venv1 python=3.6        # 常见名字为 venv1 环境
conda activate venv1                    # 激活环境
conda install django                    # 安装Django 

        下表展示了Django版本和Python版本的对应关系,请大家自行对号入座。

Django版本Python版本
1.82.7、3.2、3.3、3.4、3.5
1.9、1.102.7、3.4、3.5
1.112.7、3.4、3.5、3.6、3.7(Django 1.11.17)
2.03.4、3.5、3.6、3.7
2.13.5、3.6、3.7
2.23.5、3.6、3.7、3.8(Django 2.2.8)
3.03.6、3.7、3.8

2.2 创建一个 Django 项目

(1) 建立一个项目文件夹,并激活环境,使用django-admin命令创建一个项目,详细如下:

(2) 使用Pycharm/VSCode打开demo项目,查看目录结构,如下图所示:


        项目已创建完成,Django项目中的文件及说明如下图所示:

(3) 在虚拟环境命令行中执行以下命令运行项目:

python manage.py runserver

        此时可以看到Web服务器已经开始监听8000端口的请求了。在浏览器中输入:“http./127.0.0.1:8000",即可看到创建的Django项目页面,如下图所示。

温馨提示:

  1. 这里启动的Django自带的服务器只能用于开发和测试环境,因为这个服务器是纯Python编写的轻量级Web服务器,不适合在生产环境中使用。
  2. 如果修改了代码,不需要为了让修改的代码生效而重新启动Django自带的服务器。但是,在添加新的项目文件时,该服务器不会自动重新加载,这个时候就得手动重启服务器。
  3. 可以在终端中通过python manage.py help命令查看Django管理脚本程序可用的命令参数。
  4. 使用python manage.py runserver启动服务器时,可以在后面添加参数来指定IP地址和端口号,默认情况下启动的服务器将运行在本机的8000端口。
  5. 在终端中运行的服务器,可以通过Ctrl+C来停止它 。通过PyCharm的“运行配置”运行的服务器直接点击窗口上的关闭按钮就可以终止服务器的运行。
  6. 不能在同一个端口上启动多个服务器,因为会导致地址的冲突(端口是对IP地址的扩展,也是计算机网络地址的一部分)。

补充:
        Django是一个支持国际化和本地化的框架,因此刚才我们看到的Django项目的默认首页也是支持国际化的,我们可以通过修改配置文件 settings.py 将默认语言修改为中文,时区设置为东八区。

        修改前为:

LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'

        修改后为:

LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Beijing'

(4) 创建完 Django 项目后,在 Pycharm 的命令行执行以下命令,可以为 Django 项目生成数据表,并创建一个账户名和密码。

python manage.py migrate            # 执行数据库迁移生成数据表
python manage.py createsuperuser    # 按照提示输入账户和密码,密码强度符合一定的规则要求

(5) 重启服务器,在浏览器中访问“http://127.0.0.1:8000/admin”,使用刚刚创建的账户登录,即可看到后台管理界面。

2.3 创建 APP

        如果要开发自己的Web应用,需要先在Django项目中创建“应用”,一个Django项目可以包含一个或多个应用,推荐使用 App 来完成不同模块的任务。

(1) 通过执行如下命令创建名为 app1 的应用。

python manage.py startapp app1 

        此时,在项目的根目录下可以看到一个名称为 app1 的目录。

        其目录结构如下所示:

  • __init__.py:一个空文件,告诉Python解释器这个目录应该被视为一个Python的包。
  • admin.py:可以用来注册模型,用于在Django框架自带的管理后台中管理模型。
  • apps.py:当前应用的配置文件。
  • migrations:存放与模型有关的数据库迁移信息。
  • __init__.py:一个空文件,告诉Python解释器这个目录应该被视为一个Python的包。
  • models.py:存放应用的数据模型(MTV中的M)。
  • tests.py:包含测试应用各项功能的测试类和测试函数。
  • views.py:处理用户HTTP请求并返回HTTP响应的函数或类(MTV中的V)。

(2) 下面将已经创建的 app 添加到 settings.py 配置文件中,然后将其激活,否则 app 内的文件都不会生效,效果如下图所示。

(3) 修改应用目录下的视图文件 views.py。

from django.shortcuts import render
from django.http import HttpResponse

# Create your views here.
def show_index(request):
    return HttpResponse('<h1>Hello, Dingo!</h1>')

        视图是接收httprequest对象并返回一个HttpResponse对象的Python函数。接收 request 作为参数并返回 response 作为结果。这里定义了一个简单的视图,命名为show_index,它只是简单地返回一个信息,一个字符串Hello, Dingo!。

(4) 修改Django项目目录下的 urls.py 文件,将视图函数和用户在浏览器中请求的路径对应

from django.contrib import admin
from django.urls import path, include

from app1.views import show_index

urlpatterns = [
    path('admin/', admin.site.urls),
    path('hello/', show_index),
]

(5) 重新运行项目,并打开浏览器中访问 http://127.0.0.1:8000/hello/

(6) 上面我们通过代码为浏览器生成了内容,但仍然是静态内容,如果要生成动态内容,可以修改views.py文件并添加如下所示的代码。

from django.shortcuts import render
from django.http import HttpResponse

from random import sample

# Create your views here.
def show_index(request):
    fruits = [
        'Apple', 'Orange', 'Pitaya', 'Durian', 'Waxberry', 'Blueberry', 
        'Grape', 'Peach', 'Pear', 'Banana', 'Watermelon', 'Mango'
    ]
    selected_fruits = sample(fruits, 3)
    content = '<h3>今天推荐的水果是:</h3>'
    content += '<hr>'
    content += '<ul>'
    for fruit in selected_fruits:
        content += f'<li>{fruit}</li>'
    content += '</ul>'
    return HttpResponse(content)

(7) 刷新页面查看程序的运行结果,看看每次刷新的网页的时候,是不是可以看到不一样的内容

2.4 使用模板

        上面通过拼接HTML代码的方式为浏览器生成动态内容的做法在实际开发中是无能接受的,因为实际项目中的前端页面可能非常复杂,无法用这种拼接动态内容的方式来完成,这一点大家一定能够想到。为了解决这个问题,我们可以提前准备一个模板页(MTV中的T),所谓模板页就是一个带占位符和模板指令的HTML页面。

        Django框架中有一个名为render的便捷函数可以来完成渲染模板的操作。所谓的渲染就是用数据替换掉模板页中的模板指令和占位符,当然这里的渲染称为后端渲染,即在服务器端完成页面的渲染再输出到浏览器中。 后端渲染的做法在Web应用的访问量较大时,会让服务器承受较大的负担,所以越来越多的Web应用会选择前端渲染的方式,即服务器只提供页面所需的数据(通常是JSON格式),在浏览器中通过JavaScript代码获取这些数据并渲染页面上。

        使用模板页的步骤如下所示。

(1) 在项目目录下创建名为templates文件夹。

(2) 添加模板页index.html

        说明: 实际项目开发中,静态页由前端开发者提供,后端开发者需要将静态页修改为模板页,以便通过Python程序对其进行渲染,这种做法就是上面提到的后端渲染。

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>首页</title>
        <style>
            #fruits {
                font-size: 1.25em;
            }
        </style>
    </head>
    <body>
        <h1>今天推荐的水果是:</h1>
        <hr>
        <ul id="fruits">
            {% for fruit in fruits %}
            <li>{{ fruit }}</li>
            {% endfor %}
        </ul>
    </body>
</html>

        在上面的模板页中我们使用了{{ fruit }}这样的模板占位符语法,也使用了{% for %}这样的模板指令,这些都是Django模板语言(DTL)的一部分。关于模板语法和指令,大家可以看看Django 模板语言 DTL。

(3) 修改views.py文件,调用render函数渲染模板页。

from django.shortcuts import render
from django.http import HttpResponse

from random import sample

# Create your views here.
def show_index(request):
    fruits = [
        'Apple', 'Orange', 'Pitaya', 'Durian', 'Waxberry', 'Blueberry', 
        'Grape', 'Peach', 'Pear', 'Banana', 'Watermelon', 'Mango'
    ]
    selected_fruits = sample(fruits, 3)
    return render(request, 'index.html', {'fruits': selected_fruits})

        render函数的第一个参数是请求对象 request,第二个参数是我们要渲染的模板页的名字,第三个参数是要渲染到页面上的数据,我们通过一个字典将数据交给模板页,字典中的键就是模板页中使用的模板指令或占位符中的变量名。

(4) 到此为止,视图函数中的render还无法找到模板文件index.html,需要修改settings.py文件,配置模板文件所在的路径。修改settings.py文件,找到TEMPLATES配置,修改其中的DIRS配置。

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates'), ],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

(5) 重新运行项目或直接刷新页面查看结果。

至此,通过这个项目对Django框架有一个感性的认识。


参考

  • Django快速上手:https://gitee.com/zengyujin/Python-100-Days/blob/master/Day41-55/41.Django快速上手.md
  • Django 框架简介:https://www.imooc.com/wiki/djangolesson/djangointroduction.html

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

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

相关文章

Stable Diffusion 1 - 初始跑通 文字生成图片

文章目录关于 Stable DiffusionLexica代码实现安装依赖库登陆 huggingface查看 huggingface token下载模型计算生成设置宽高测试迭代次数生成多列图片关于 Stable Diffusion A latent text-to-image diffusion model Stable Diffusion 是一个文本到图像的潜在扩散模型&#xff…

撕开市场缺口,认养一头牛“犟心”能给谁?

随着疫情防控政策优化&#xff0c;2023年以来中国消费力和投资活动均迎来复苏。其中&#xff0c;乳制品赛道受益于国内消费者健康消费理念的加强&#xff0c;呈现出稳步增长的势头。一方面&#xff0c;乳制品消费需求旺盛&#xff0c;市场未来可期。据中商研究院预计&#xff0…

【Hello Linux】Linux环境下写的第一个程序 -- 进度条

作者&#xff1a;小萌新 专栏&#xff1a;Linux 作者简介&#xff1a;大二学生 希望能和大家一起进步&#xff01; 本篇博客简介&#xff1a;写出Linux中的第一个小程序 进度条 进度条小程序行缓冲区概念\r 和 \n进度条代码和演示行缓冲区概念 我们首先用两段代码来感受下行缓…

结合ENVI和PIE Hyp讲述高光谱遥感信息处理技术,包括光谱恢复、光谱库建立、光谱特征提取、混合像元分解、图像分类及精度检验

大气温室气体浓度不断增加&#xff0c;导致气候变暖加剧&#xff0c;随之会引发一系列气象、生态和环境灾害。如何降低温室气体浓度和应对气候变化已成为全球关注的焦点。海洋是地球上最大的“碳库”,“蓝碳”即海洋活动以及海洋生物&#xff08;特别是红树林、盐沼和海草&…

05 OpenCV色彩空间处理

色彩空间&#xff08;Color Space&#xff09;是一种用于描述颜色的数学模型&#xff0c;它将颜色表示为多维向量或坐标&#xff0c;通常由三个或四个独立的分量来表示。不同的色彩空间在颜色的表示方式、可表达颜色的范围、计算速度和应用场景等方面存在差异&#xff0c;不同的…

ChatGPT写代码水平惊艳到我,很性感但有点危险

这几天属实是被ChatGPT刷屏了&#xff0c;十年寒窗无人问&#xff0c;一举成名天下知。不少人和ChatGPT对话后&#xff0c;都觉得自己像个傻逼。这位“最强懂哥”可以轻松应答各种问题&#xff0c;给出的答案不仅条理清晰&#xff0c;还会引用例子支撑观点。让它帮忙写程序&…

九、初识卷积

文章目录1、通过边缘检测认识卷积2、Padding3、Strid Convelution4、RGB图像的卷积THE END1、通过边缘检测认识卷积 \qquad在使用神经网络进行图像识别时&#xff0c;神经网络的前几层需要完成对图像的边缘检测任务&#xff0c;所谓的边缘检测就是让计算机识别出一张图片的垂直…

【智能计算数学】微积分

高数问题解决流程引例&#xff1a;回归回归引例&#xff1a;分类分类线性可分FLD线性不可分智能计算讨论范围下降法为什么要用下降法&#xff1f;- 解析解很难写出公式或很复杂难计算有哪些常用的下降法&#xff1f;- 梯度下降&高斯-牛顿法梯度下降&#xff08;Gradient De…

初步认识操作系统(Operator System)

操作系统一&#xff0c;冯诺依曼体系结构内存的重要作用二&#xff0c;操作系统的概念三&#xff0c;设计操作系统的目的三&#xff0c;操作系统在计算机体系中的定位四&#xff0c;操作系统是如何进行管理的一&#xff0c;冯诺依曼体系结构 在众多计算机相关的书籍中&#xff…

linux安装docker和Docker Compose

1、安装环境 此处在Centos7进行安装&#xff0c;可以使用以下命令查看CentOS版本 lsb_release -a 在 CentOS 7安装docker要求系统为64位、系统内核版本为 3.10 以上&#xff0c;可以使用以下命令查看 uname -r 2、用yum源安装 2.1 查看是否已安装docker列表 yum list inst…

Doom流量回放工具导致的测试环境服务接口无响应的排查过程

Doom流量回放工具导致的测试环境服务接口无响应的排查过程 现象描述&#xff1a; a)部分接口&#xff08;A组接口&#xff09;无响应 b)部分接口&#xff08;B组接口&#xff09;正常响应 c)还有一部分接口&#xff08;C组接口&#xff09;,场景1无响应&#xff0c;场景2正常响…

ChatGPT 桌面应用程序 for macOS, Linux, Windows v0.10

请访问原文链接&#xff1a;https://sysin.org/blog/chatgpt/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;www.sysin.org ChatGPT 是什么 ChatGPT 是 OpenAI 公司开发的一种基于对话优化的语言模型。用俗话说就是“人工智障”聊天机器…

三次握手-升级详解-注意问题

TCP建立连接的过程就是三次握手&#xff08;Three-way Handshake&#xff09;&#xff0c;在建立连接的过程实际上就是客户端和服务端之间总共发送三个数据包。进行三次握手主要是就是为了确认双方都能接收到数据包和发送数据包&#xff0c;而客户端和服务端都会指定自己的初始…

Tomcat构建

软件架构C/S:Client/Server.需要安装才能使用。B/S:Brower/Server。有浏览器就可以。资源分类动态资源&#xff1a;每个用户访问相同的资源后&#xff0c;得到的结果可能不一样&#xff0c;称为动态资源。动态资源被访问后&#xff0c;先转换为静态资源&#xff0c;再被浏览器解…

ESP-IDF: 基于计数型信号量的生产者和消费者模型代码

ESP-IDF: 基于计数型信号量的生产者和消费者模型代码 SemaphoreHandle_t freeBowl NULL;//初始状态有5个空碗 SemaphoreHandle_t Mantou NULL;//初始状态没有馒头&#xff0c;从零开始计数 int queue[5]; //用数组模拟空碗&#xff0c;对数组取余操作&#xff0c;模拟循环链…

如何利用 ESLint 规范 TypeScript 代码

ESLint 是一种 JavaScript linter&#xff0c;可以用来规范 JavaScript 或 TypeScript 代码&#xff0c;本文教你怎么在项目中快速把 ESLint 安排上。 前导 怎么写出优雅的代码是一个老生常谈的话题&#xff0c;这其中包含了太多内容可聊&#xff0c;但搞一套标准规范绝对是万…

opencv锁定鼠标定位

大家好&#xff0c;我是csdn的博主&#xff1a;lqj_本人 这是我的个人博客主页&#xff1a; lqj_本人的博客_CSDN博客-微信小程序,前端,python领域博主lqj_本人擅长微信小程序,前端,python,等方面的知识https://blog.csdn.net/lbcyllqj?spm1011.2415.3001.5343哔哩哔哩欢迎关注…

【MySQL进阶】 存储引擎 索引

&#x1f60a;&#x1f60a;作者简介&#x1f60a;&#x1f60a; &#xff1a; 大家好&#xff0c;我是南瓜籽&#xff0c;一个在校大二学生&#xff0c;我将会持续分享Java相关知识。 &#x1f389;&#x1f389;个人主页&#x1f389;&#x1f389; &#xff1a; 南瓜籽的主页…

如何编译和运行C++程序?

C 和C语言类似&#xff0c;也要经过编译和链接后才能运行。在《C语言编译器》专题中我们讲到了 VS、Dev C、VC 6.0、Code::Blocks、C-Free、GCC、Xcode 等常见 IDE 或编译器&#xff0c;它们除了可以运行C语言程序&#xff0c;还可以运行 C 程序&#xff0c;步骤是一样的&#…

SpringMvc的请求和响应

SpringMvc的数据响应 1.springmvc的数据相应方式 &#xff08;1&#xff09;页面跳转 直接返回字符串 通过ModelAndView对象返回 &#xff08;2&#xff09;回写数据 直接返回字符串 返回对象或集合 页面跳转 jsp页面 <% page contentType"text/html;charsetUTF-8&q…