Django入门到实战
一、Django简介
Django 是一个高级的 Python 网络框架,可以快速开发安全和可维护的网站。
完备性
Django遵循“功能完备”的理念,提供开发人员可能想要“开箱即用”的几乎所有功能。因为你需要的一切都是一个”产品“的一部分,它们都可以无缝结合在一起,遵循一致性设计原则,并且具有广泛和最新的文档.
通用性
Django 可以(并已经)用于构建几乎任何类型的网站—从内容管理系统和维基,到社交网络和新闻网站。它可以与任何客户端框架一起工作,并且可以提供几乎任何格式(包括 HTML,Rss源,JSON,XML等)的内容。你正在阅读的网站就是基于Django。
在内部,尽管它为几乎所有可能需要的功能(例如几个流行的数据库,模版引擎等)提供了选择,但是如果需要,它也可以扩展到使用其他组件。
安全性
Django 帮助开发人员通过提供一个被设计为“做正确的事情”来自动保护网站的框架来避免许多常见的安全错误。例如,Django提供了一种安全的方式来管理用户账户和密码,避免了常见的错误,比如将session放在cookie中这种易受攻击的做法(取而代之的是cookies只包含一个密钥,实际数据存储在数据库中)或直接存储密码而不是密码哈希。
密码哈希是通过密码散列函数发送密码而创建的固定长度值。 Django 能通过运行哈希函数来检查输入的密码-就是-将输出的哈希值与存储的哈希值进行比较是否正确。然而由于功能的“单向”性质,即时存储的哈希值受到威胁,攻击者也难以解决原始密码。(但其实有彩虹表-译者观点)
默认情况下,Django 可以防范许多漏洞,包括SQL注入,跨站点脚本,跨站点请求伪造和点击劫持 (请参阅 网站安全 相关信息,如有兴趣).
可扩展
Django 使用基于组件的 “无共享” 架构 (架构的每一部分独立于其他架构,因此可以根据需要进行替换或更改). 在不用部分之间有明确的分隔意味着它可以通过在任何级别添加硬件来扩展服务:缓存服务器,数据库服务器或应用程序服务器。一些最繁忙的网站已经成功地缩放了Django,以满足他们的需求(例如Instagram和Disqus,仅举两个例子,可自行添加)。
可维护性
Django 代码编写是遵照设计原则和模式,鼓励创建可维护和可重复使用的代码。特别是它使用了不要重复自己(DRY)原则,所以没有不必要的重复,减少了代码的数量。Django还将相关功能分组到可重用的“应用程序”中,并且在较低级别将相关代码分组或模块( 模型视图控制器 (MVC) 模式).
灵活性
Django 是用Python编写的,它在许多平台上运行。这意味着你不受任务特定的服务器平台的限制,并且可以在许多种类的Linux,Windows和Mac OsX 上运行应用程序。此外,Django得到许多网络托管提供商的好评,他们经常提供特定的基础设施和托管Django网站的文档。
二、Django安装
(1)版本选择
Python版本与Django对照关系
如果你不知道你的Python,在命令行输入
python
即可获取版本信息
Django 版本 | Python 版本 |
---|---|
1.11 | 2.7, 3.4, 3.5, 3.6, 3.7 (1.11.17 添加) |
2.0 | 3.4,3.5,3.6,3.7 |
2.1 | 3.5,3.6,3.7 |
2.2 | 3.5, 3.6, 3.7, 3.8 (2.2.8 添加) |
3.0 | 3.6, 3.7, 3.8 |
(2)Django安装
本案例以Django 3.0 搭配 Python 3.7 为例
在命令行执行
pip install Django==3.0.8
执行如下代码,若出现Django版本信息则安装成功
py -m django --version
三、编写第一个Django应用程序
(1)创建项目
方法一:新建一个空的文件夹用于放置我们的项目,然后在该项目目录下执行
django-admin startproject mysite #mysite为所创建的项目名称, 根目录名称对Django没有影响
你必须避免使用 Python 或 Django 的内部保留字来命名你的项目,例如django (会和 Django 自己产生冲突)或 test (会和 Python 的内置组件产生冲突)
方法二:直接在pycharm创建新项目选择Django
(2)项目结构
创建的项目目录如下
其中各文件作用如下
mysite
—mysite
——init.py:告诉 Python 这个目录应该被认为是一个 Python 包。
——asgi.py:作为你的项目的运行在 ASGI 兼容的Web服务器上的入口。
——settings.py:配置文件
——urls.py:URL 声明文件
——wsgi.py:作为你的项目的运行在 WSGI 兼容的Web服务器上的入口。详见官方如何使用WSGI
—manage.py:一个让你用各种方式管理 Django 项目的命令行工具。详见官方文档
初学者主要关注setting.py
和urls.py
这两个文件
(3)启动项目
在项目根目录(看到manages.py那一层)下执行
python manage.py runserver
访问http://127.0.0.1:8000/
看到此页面说明启动成功
如果想修改端口,则运行
py manage.py runserver 8080 # 8080为你想设置的端口号
如果你想要修改服务器监听的IP,在端口之前输入新的。比如,为了监听所有服务器的公开IP,运行py manage.py runserver 0:8000
(0为0.0.0.0的简写)
(4)创建应用
- 创建应用(在项目根目录(看到manages.py那一层)执行)
py manage.py startapp polls
为了创建 URLconf,请在 polls 目录里新建一个 urls.py 文件。你的应用目录现在看起来应该是这样:
- 在
polls/views.py
文件中添加如下代码,这是我们第一个视图模块
from django.http import HttpResponse
def index(request):
return HttpResponse("第一个Django应用!")
- 接着在
polls/urls.py
中添加
from django.urls import path
from . import views
urlpatterns = [
#将视图与URL绑定
path('', views.index, name='index'),
]
这里的path函数
有四个参数,其中两个必须参数:route 和 view,两个可选参数:kwargs 和 name
1.route
route 是一个匹配 URL 的准则(类似正则表达式)。当 Django 响应一个请求时,它会从 urlpatterns 的第一项开始,按顺序依次匹配列表中的项,直到找到匹配的项。
这些准则不会匹配 GET 和 POST 参数或域名。例如,URLconf 在处理请求 https://www.example.com/myapp/ 时,它会尝试匹配 myapp/ 。处理请求 https://www.example.com/myapp/?page=3 时,也只会尝试匹配 myapp/。
2.view
当 Django 找到了一个匹配的准则,就会调用这个特定的视图函数,并传入一个 HttpRequest 对象作为第一个参数,被“捕获”的参数以关键字参数的形式传入。稍后,我们会给出一个例子。
3.kwargs
任意个关键字参数可以作为一个字典传递给目标视图函数。
4.name
为你的 URL 取名能使你在 Django 的任意地方唯一地引用它,尤其是在模板中。这个有用的特性允许你只改一个文件就能全局地修改某个 URL 模式。
- 然后在
mysite/urls.py
文件的 urlpatterns 列表里插入一个include()
(注意:当包括其它 URL 模式时你应该总是使用 include() , admin.site.urls 是唯一例外。),并导入,最后代码如下
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('polls/', include('polls.urls')),
path('admin/', admin.site.urls),
]
- 运行
py manage.py runserver
访问http://127.0.0.1:8000/polls/
(注意后面地址是/polls)
显示我们在views中写的“第一个Django应用!”表示成功
总结:视图创建流程:先在应用的URLconfs通过URL映射views视图,然后在根URLconf文件引入其他URLconfs文件