关于“Python”的核心知识点整理大全51

简介: 关于“Python”的核心知识点整理大全51

06b6f8155200b53eb4081af34c9a912d_e34cfa47e93642e3b6ed42239cf3c05f.png

第 18 章

Django入门

18.1 建立项目

建立项目时,首先需要以规范的方式对项目进行描述,再建立虚拟环境,以便在其中创建项目。


18.1.1 制定规范

完整的规范详细说明了项目的目标,阐述了项目的功能,并讨论了项目的外观和用户界面。 与任何良好的项目规划和商业计划书一样,规范应突出重点,帮助避免项目偏离轨道。这里不会 制定完整的项目规划,而只列出一些明确的目标,以突出开发的重点。我们制定的规范如下:


我们要编写一个名为“学习笔记”的Web应用程序,让用户能够记录感兴趣的主 题,并在学习每个主题的过程中添加日志条目。“学习笔记”的主页对这个网站进行描 述,并邀请用户注册或登录。用户登录后,就可创建新主题、添加新条目以及阅读既 有的条目。学习新的主题时,记录学到的知识可帮助跟踪和复习这些知识。优秀的应用程序让这个记录 过程简单易行。


18.1.2 建立虚拟环境

要使用Django,首先需要建立一个虚拟工作环境。虚拟环境是系统的一个位置,你可以在其 中安装包,并将其与其他Python包隔离。将项目的库与其他项目分离是有益的,且为了在第20章 将“学习笔记”部署到服务器,这也是必须的。


为项目新建一个目录,将其命名为learning_log,再在终端中切换到这个目录,并创建一个虚 拟环境。如果你使用的是Python 3,可使用如下命令来创建虚拟环境:


learning_log$ python -m venv ll_env
learning_log$

这里运行了模块venv,并使用它来创建一个名为ll_env的虚拟环境。如果这样做管用,请跳 到后面的18.1.4节;如果不管用,请阅读18.1.3节。


18.1.3 安装 virtualenv

$ pip install --user virtualenv

别忘了,对于这个命令,你可能需要使用稍微不同的版本(如果你没有使用过pip,请参阅 12.2.1节)。


注意

如果你使用的是Linux系统,且上面的做法不管用,可使用系统的包管理器来安装 virtualenv。例如,要在Ubuntu系统中安装virtualenv,可使用命令sudo apt-get install python-virtualenv。


在终端中切换到目录learning_log,并像下面这样创建一个虚拟环境:


learning_log$ virtualenv ll_env
New python executable in ll_env/bin/python
Installing setuptools, pip...done.
learning_log$

注意

如果你的系统安装了多个Python版本,需要指定virtualenv使用的版本。例如,命令 virtualenv ll_env --python=python3创建一个使用Python 3的虚拟环境。


18.1.4 激活虚拟环境

建立虚拟环境后,需要使用下面的命令激活它:


learning_log$ source ll_env/bin/activate
1 (ll_env)learning_log$

这个命令运行ll_env/bin中的脚本activate。环境处于活动状态时,环境名将包含在括号内,如 处所示。在这种情况下,你可以在环境中安装包,并使用已安装的包。你在ll_env中安装的包 仅在该环境处于活动状态时才可用。


注意

如果你使用的是Windows系统,请使用命令ll_env\Scripts\activate(不包含source)来 激活这个虚拟环境。


要停止使用虚拟环境,可执行命令deactivate:


(ll_env)learning_log$ deactivate
learning_log$

如果关闭运行虚拟环境的终端,虚拟环境也将不再处于活动状态。


18.1.5 安装 Django

创建并激活虚拟环境后,就可安装Django了


(ll_env)learning_log$ pip install Django
Installing collected packages: Django
Successfully installed Django
Cleaning up...
(ll_env)learning_log$

由于我们是在虚拟环境中工作,因此在所有的系统中,安装Django的命令都相同:不需要指 定标志--user,也无需使用python -m pip install package_name这样较长的命令。 别忘了,Django仅在虚拟环境处于活动状态时才可用。


18.1.6 在 Django 中创建项目

在依然处于活动的虚拟环境的情况下(ll_env包含在括号内),执行如下命令来新建一个项目:


1 (ll_env)learning_log$ django-admin.py startproject learning_log .
2 (ll_env)learning_log$ ls
learning_log ll_env manage.py
3 (ll_env)learning_log$ ls learning_log
__init__.py settings.py urls.py wsgi.py

处的命令让Django新建一个名为learning_log的项目。这个命令末尾的句点让新项目使用合 适的目录结构,这样开发完成后可轻松地将应用程序部署到服务器。


注意

千万别忘了这个句点,否则部署应用程序时将遭遇一些配置问题。如果忘记了这个句点, 就将创建的文件和文件夹删除(ll_env除外),再重新运行这个命令。


在1处,运行了命令ls(在Windows系统上应为dir),结果表明Django新建了一个名为 learning_log的目录。它还创建了一个名为manage.py的文件,这是一个简单的程序,它接受命令 并将其交给Django的相关部分去运行。我们将使用这些命令来管理诸如使用数据库和运行服务器 等任务。


目录learning_log包含4个文件(见3),其中最重要的是settings.py、urls.py和wsgi.py。文件 settings.py指定Django如何与你的系统交互以及如何管理项目。在开发项目的过程中,我们将修 改其中一些设置,并添加一些设置。文件urls.py告诉Django应创建哪些网页来响应浏览器请求。 文件wsgi.py帮助Django提供它创建的文件,这个文件名是web server gateway interface(Web服务 器网关接口)的首字母缩写。


18.1.7 创建数据库

Django将大部分与项目相关的信息都存储在数据库中,因此我们需要创建一个供Django使 用的数据库。为给项目“学习笔记”创建数据库,请在处于活动虚拟环境中的情况下执行下面 的命令:


(ll_env)learning_log$ python manage.py migrate
1 Operations to perform:
 Synchronize unmigrated apps: messages, staticfiles
 Apply all migrations: contenttypes, sessions, auth, admin
 --snip--
 Applying sessions.0001_initial... OK
2 (ll_env)learning_log$ ls
db.sqlite3 learning_log ll_env manage.py

我们将修改数据库称为迁移数据库。首次执行命令migrate时,将让Django确保数据库与项 目的当前状态匹配。在使用SQLite(后面将更详细地介绍)的新项目中首次执行这个命令时, Django将新建一个数据库。在1处,Django指出它将创建必要的数据库表,用于存储我们将在这 个项目(Synchronize unmigrated apps,同步未迁移的应用程序)中使用的信息,再确保数据库结 构与当前代码(Apply all migrations,应用所有的迁移)匹配。


在2处,我们运行了命令ls,其输出表明Django又创建了一个文件——db.sqlite3。SQLite是 一种使用单个文件的数据库,是编写简单应用程序的理想选择,因为它让你不用太关注数据库管 理的问题。


18.1.8 查看项目

下面来核实Django是否正确地创建了项目。为此,可执行命令runserver,如下所示


(ll_env)learning_log$ python manage.py runserver
Performing system checks...
1 System check identified no issues (0 silenced).
July 15, 2015 - 06:23:51
2 Django version 1.8.4, using settings 'learning_log.settings'
3 Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

Django启动一个服务器,让你能够查看系统中的项目,了解它们的工作情况。当你在浏览器 中输入URL以请求网页时,该Django服务器将进行响应:生成合适的网页,并将其发送给浏览器。 在1处,Django通过检查确认正确地创建了项目;在2处,它指出了使用的Django版本以及 当前使用的设置文件的名称;在3处,它指出了项目的URL。URL http://127.0.0.1:8000/表明项目 将在你的计算机(即localhost)的端口8000上侦听请求。localhost是一种只处理当前系统发出的 请求,而不允许其他任何人查看你正在开发的网页的服务器。 现在打开一款Web浏览器,并输入URL:http://localhost:8000/;如果这不管用,请输入 http://127.0.0.1:8000/。你将看到类似于图18-1所示的页面,这个页面是Django创建的,让你知道 到目前为止一切正常。现在暂时不要关闭这个服务器。若要关闭这个服务器,按Ctrl + C即可。


86437a169846680ff7a4bdb30ba84771_168f155d9e494cfebc15fa418dfcbf22.png


注意

如果出现错误消息“That port is already in use”(指定端口已被占用),请执行命令python manage.py runserver 8001,让Diango使用另一个端口;如果这个端口也不可用,请不断 执行上述命令,并逐渐增大其中的端口号,直到找到可用的端口。


18.2 创建应用程序

Django项目由一系列应用程序组成,它们协同工作,让项目成为一个整体。我们暂时只创建 一个应用程序,它将完成项目的大部分工作。在第19章,我们将再添加一个管理用户账户的应用 程序。


当前,在前面打开的终端窗口中应该还运行着runserver。请再打开一个终端窗口(或标签 页),并切换到manage.py所在的目录。激活该虚拟环境,再执行命令startapp:


learning_log$ source ll_env/bin/activate
(ll_env)learning_log$ python manage.py startapp learning_logs
1 (ll_env)learning_log$ ls
db.sqlite3 learning_log learning_logs ll_env manage.py
2 (ll_env)learning_log$ ls learning_logs/
admin.py __init__.py migrations models.py tests.py views.py

命令startapp appname让Django建立创建应用程序所需的基础设施。如果现在查看项目目录, 将看到其中新增了一个文件夹learning_logs(见1)。打开这个文件夹,看看Django都创建了什么 (见2)。其中最重要的文件是models.py、admin.py和views.py。我们将使用models.py来定义我们 要在应用程序中管理的数据。admin.py和views.py将在稍后介绍。


18.2.1 定义模型

我们来想想涉及的数据。每位用户都需要在学习笔记中创建很多主题。用户输入的每个条目 都与特定主题相关联,这些条目将以文本的方式显示。我们还需要存储每个条目的时间戳,以便 能够告诉用户各个条目都是什么时候创建的。 打开文件models.py,看看它当前包含哪些内容:


models.py

from django.db import models
# 在这里创建模型

这为我们导入了模块models,还让我们创建自己的模型。模型告诉Django如何处理应用程序 中存储的数据。在代码层面,模型就是一个类,就像前面讨论的每个类一样,包含属性和方法。 下面是表示用户将要存储的主题的模型:


from django.db import models
class Topic(models.Model):
 """用户学习的主题"""
1 text = models.CharField(max_length=200)
2 date_added = models.DateTimeField(auto_now_add=True)
3 def __str__(self):
 """返回模型的字符串表示"""
 return self.text

我们创建了一个名为Topic的类,它继承了Model——Django中一个定义了模型基本功能的 类。Topic类只有两个属性:text和date_added。 属性text是一个CharField——由字符或文本组成的数据(见)。需要存储少量的文本,如 名称、标题或城市时,可使用CharField。定义CharField属性时,必须告诉Django该在数据库中 预留多少空间。在这里,我们将max_length设置成了200(即200个字符),这对存储大多数主题 名来说足够了。 属性date_added是一个DateTimeField——记录日期和时间的数据(见1)。我们传递了实参 auto_add_now=True,每当用户创建新主题时,这都让Django将这个属性自动设置成当前日期和 时间。


注意


要获悉可在模型中使用的各种字段,请参阅Django Model Field Reference(Django模型字 段参考),其网址为https://docs.djangoproject.com/en/1.8/ref/models/fields/。就当前而言, 你无需全面了解其中的所有内容,但自己开发应用程序时,这些内容会提供极大的帮助。

目录
相关文章
|
1月前
|
测试技术 API Python
【10月更文挑战第1天】python知识点100篇系列(13)-几种方法让你的电脑一直在工作
【10月更文挑战第1天】 本文介绍了如何通过Python自动操作鼠标或键盘使电脑保持活跃状态,避免自动息屏。提供了三种方法:1) 使用PyAutoGUI,通过安装pip工具并执行`pip install pyautogui`安装,利用`moveRel()`方法定时移动鼠标;2) 使用Pymouse,通过`pip install pyuserinput`安装,采用`move()`方法移动鼠标绝对位置;3) 使用PyKeyboard,同样需安装pyuserinput,模拟键盘操作。文中推荐使用PyAutoGUI,因其功能丰富且文档详尽。
|
3月前
|
Python
python知识点
【8月更文挑战第27天】python知识点
3397 2
|
14天前
|
缓存 Java 索引
[Python]知识点
本文主要介绍了Python的一些高级知识点和使用细节,包括pip的使用、内置函数、列表、元组、字典、集合、变量、Lambda表达式、面向对象编程、异常处理、模块及标准库等。文章适合有一定Python基础的读者,重点在于深入理解和掌握Python的高级特性。文中还提供了大量示例代码,帮助读者更好地理解和应用这些知识点。
19 1
[Python]知识点
WK
|
3月前
|
存储 机器学习/深度学习 JSON
Python入门知识点
Python入门覆盖历史、设计理念、变量、数据类型、控制结构等。了解Python的发展,掌握动态类型的灵活性,熟悉整数、浮点数、字符串等数据类型。学会if/else、for/while循环构建逻辑流程,使用def定义函数,lambda快速创建匿名函数。通过类实现面向对象编程,利用模块和包组织代码。掌握try-except处理异常,open()进行文件操作。利用标准库和第三方库增强功能,理解集合、字典、列表推导式的应用,深入魔法方法、递归、装饰器等高级特性,以及上下文管理器和字符串、列表、元组的操作技巧。
WK
34 0
|
30天前
|
安全 Linux 数据安全/隐私保护
python知识点100篇系列(15)-加密python源代码为pyd文件
【10月更文挑战第5天】为了保护Python源码不被查看,可将其编译成二进制文件(Windows下为.pyd,Linux下为.so)。以Python3.8为例,通过Cython工具,先写好Python代码并加入`# cython: language_level=3`指令,安装easycython库后,使用`easycython *.py`命令编译源文件,最终生成.pyd文件供直接导入使用。
python知识点100篇系列(15)-加密python源代码为pyd文件
|
1月前
|
网络协议 数据库连接 Python
python知识点100篇系列(17)-替换requests的python库httpx
【10月更文挑战第4天】Requests 是基于 Python 开发的 HTTP 库,使用简单,功能强大。然而,随着 Python 3.6 的发布,出现了 Requests 的替代品 —— httpx。httpx 继承了 Requests 的所有特性,并增加了对异步请求的支持,支持 HTTP/1.1 和 HTTP/2,能够发送同步和异步请求,适用于 WSGI 和 ASGI 应用。安装使用 httpx 需要 Python 3.6 及以上版本,异步请求则需要 Python 3.8 及以上。httpx 提供了 Client 和 AsyncClient,分别用于优化同步和异步请求的性能。
python知识点100篇系列(17)-替换requests的python库httpx
|
27天前
|
调度 Python
python知识点100篇系列(20)-python协程与异步编程asyncio
【10月更文挑战第8天】协程(Coroutine)是一种用户态内的上下文切换技术,通过单线程实现代码块间的切换执行。Python中实现协程的方法包括yield、asyncio模块及async/await关键字。其中,async/await结合asyncio模块可更便捷地编写和管理协程,支持异步IO操作,提高程序并发性能。协程函数、协程对象、Task对象等是其核心概念。
|
24天前
|
Python Windows
python知识点100篇系列(24)- 简单强大的日志记录器loguru
【10月更文挑战第11天】Loguru 是一个功能强大的日志记录库,支持日志滚动、压缩、定时删除、高亮和告警等功能。安装简单,使用方便,可通过 `pip install loguru` 快速安装。支持将日志输出到终端或文件,并提供丰富的配置选项,如按时间或大小滚动日志、压缩日志文件等。还支持与邮件通知模块结合,实现邮件告警功能。
python知识点100篇系列(24)- 简单强大的日志记录器loguru
|
25天前
|
自然语言处理 Python Windows
python知识点100篇系列(23)- 使用stylecloud生成词云
【10月更文挑战第10天】`stylecloud` 是 `wordcloud` 的优化版,支持使用 Font Awesome 图标自定义词云形状,操作更简便。本文介绍如何安装 `jieba` 和 `stylecloud` 库,并使用它们生成中文词云。通过 `jieba` 进行分词,再利用 `stylecloud` 的 `gen_stylecloud` 方法生成具有特定形状和颜色的词云图像。
python知识点100篇系列(23)- 使用stylecloud生成词云
|
28天前
|
Java Python
> python知识点100篇系列(19)-使用python下载文件的几种方式
【10月更文挑战第7天】本文介绍了使用Python下载文件的五种方法,包括使用requests、wget、线程池、urllib3和asyncio模块。每种方法适用于不同的场景,如单文件下载、多文件并发下载等,提供了丰富的选择。