目录
1 django简介
Django的发展始于2003年,最初由一个负责创建和维护报纸网站的网络团队开发。这个团队在创建了许多网站后,开始考虑并重用许多常见的代码和设计模式,从而共同编写了一个通用的Web开发框架。在2005年7月,他们将这个框架作为开源软件发布,命名为“Django”。
Django的命名来源于比利时的爵士音乐家Django Reinhardt,作者希望Django能够优雅地开发功能丰富的Web应用。随着时间的推移,Django不断发展壮大,从2008年9月的第一个里程碑版本(1.0)到最近发布的版本(1.11),每个版本都添加了新功能和错误修复。
由于Django在近年来的广泛,被著名IT开迅速发展,应用越来越发杂志SDTimes评选为2013SDTimes100,位列"API、库和框架"分类第6位,被认为是该领域的佼佼者。
Django框架是一个web框架, 而且是一个后端框架程序, 它不是服务器, 需要注意。Django框架帮我们封装了很多的组件, 帮助我们实现各种功能, 具有很强的扩展性。
Django 提供了通用 Web 开发模式的高度抽象,为频繁进行的编程作业提供了快速解决方法,并为“如何解决问题”提供了清晰明了的约定。Django 通过 DRY(Don't Repeat Yourself,不要重复自己)的理念来鼓励快速开发。
Django 框架支持主流的操作系统平台包括 Windows,Linux,MacOS 等。Python Django 框架是一款全能型框架,它内置了许多模块,极大的方便了 Web 开发者,也正是由于它的“全面性”,会在学习 Django 的时候感到不知该如何处下手。
django具备以下特点:
- 强大的ORM(对象关系映射):Django提供了一个高级的ORM,使开发人员可以使用Python代码而非SQL查询语言来操作数据库。这简化了数据访问和管理,并提供了对多种数据库后端的支持。
- URL路由和视图:Django使用URLconf将URL映射到相应的视图函数或类。这允许定义易于维护的URL模式,并将其与特定的视图逻辑关联起来。
- 模板引擎:Django提供了一个灵活且易于使用的模板引擎,允许将应用程序逻辑和界面分离。通过使用模板,可以定义HTML页面和其他格式的输出。
- 表单处理:Django提供了一个方便的表单处理框架,可以轻松处理用户的输入数据验证、数据处理和表单呈现。
- 用户认证和权限:Django提供了内置的用户认证和权限系统,用于处理用户身份验证、用户注册、密码重置、用户权限等功能。
- 管理后台:Django提供了一个自动生成的管理后台,允许轻松管理和维护数据模型的增删改查操作,提供了强大的CRUD(增删改查)功能。
- 简单易学:Django的文档齐全、易于理解,使其成为编写和发布Web应用程序的理想工具。事实上,即使是新手也能够很快地学会Django,并且能够快速地开发功能丰富的应用程序。
- 灵活性强:Django具有灵活的架构,允许程序员在任何时候更新、修改或添加新的功能。另外,Django使用的ORM(对象关系映射)工具允许程序员使用Python对象进行数据库操作,从而省去了编写SQL语句的麻烦。
- 易于扩展:Django的模块化结构使程序员能够轻松地添加或删除特定功能以满足客户的需求。开发人员可以轻松地实现自己的扩展。
- 安全:Django具有集成的安全功能。它包括用于进行身份验证、防止跨站点请求伪造(CSRF)的工具、用于防止SQL注入攻击的机制等。这些功能可最大程度地保护系统的安全性。
2 开发模式
Django也是一个MVC框架。但是在Django中,控制器接受用户输入的部分由框架自行处理,所以Django 里更关注的是模型(Model)、模板(Template)和视图(Views),称为 MTV模式:
- M 代表模型(Model),即数据存取层。 该层处理与数据相关的所有事务: 如何存取、如何验证有效性、包含哪些行为以及数据之间的关系等。
- T 代表模板(Template),即表现层。 该层处理与表现相关的决定: 如何在页面或其他类型文档中进行显示。
- V 代表视图(View),即业务逻辑层。 该层包含存取模型及调取恰当模板的相关逻辑。 你可以把它看作模型与模板之间的桥梁。
3 django安装配置
Django安装
pip install django==1.6.11
注:需要联网安装,版本根据自己需求
Django环境安装
mkvirtualenv django_env -p python3
Django程序创建
django-admin startproject sitename
进入创建的项目, 可以运行django提供的建议运行服务器来运行我们添加的代码:
python manage.py runserver IP地址:端口
如果IP地址和端口号不想指定,可以使用系统默认提供的127.0.0.1的ip地址和8000的端口号: 这时候就可以打开网址了,但默认是美国时间和英文,所以不是很方便,需要的话可以在项目的settings文件中, 我们把它改为亚洲/上海时间和中文。
常用命令
代码 | 功能 |
python manage.py runserver ip:port | 启动服务器,默认ip和端口为http://127.0.0.1:8000/ |
python manage.py startapp appname | 新建 app |
python manage.py syncdb | 同步数据库命令,Django 1.7及以上版本需要用以下的命令 |
python manage.py makemigrations | 显示并记录所有数据的改动 |
python manage.py migrate | 将改动更新到数据库 |
python manage.py createsuperuser | 创建超级管理员 |
python manage.py dbshell | 数据库命令行 |
python manage.py | 查看命令列表 |
4 添加子应用
在日常开发中, 我们会经常使用重复的代码, 所以我们可以对代码进行封装, 在不同的地方进行调用. 同理: 如果一个项目中我们有很多的重复业务功能, 我们是否也可以对这些业务功能进行封装, 创建一个一个相对独立的模块来进行管理呢? 故: django中推出了子应用的概念, 使用子应用来管理各个业务功能, 如果有重复的, 可以方便复制调用。
python manage.py startapp users
子应用的相关文件作用如下:
- admin.py 文件跟网站的后台管理站点配置相关。
- apps.py 文件用于配置当前子应用的相关信息。
- migrations 目录用于存放数据库迁移历史文件。
- models.py 文件用户保存数据库模型类。
- tests.py 文件用于开发测试用例,编写单元测试。
- views.py 文件用于编写Web应用视图。
创建子应用后,如果想要使用子应用,我们还需要在setting.py进行配置,将子应用添加到项目中。
创建视图
在子应用的views.py里定义视图
from django.http import HttpResponse
def index(request):
return HttpResponse("hello the world!")
视图函数的第一个传入参数必须定义,用于接收Django构造的包含了请求数据的HttpReqeust对象,通常名为request。
视图函数的返回值必须为一个响应对象,不能像Flask一样直接返回一个字符串,可以将要返回的字符串数据放到一个HTTPResponse对象中。
定义路由
在子应用中新建一个urls.py文件用于保存该应用的路由
from django.conf.urls import url
from . import views
urlpatterns = [url(r'^index/$', views.index),]
在工程总路由demo/urls.py中添加子应用的路由数据
from django.conf.urls import url, include
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^users/', include('users.urls')), ]
路由的访问流程如下图所示:
路由说明:
- 路由信息定义在工程同名目录下的urls.py文件;可以在各个子应用中定义属于自己的urls.py来保存该应用的路由。然后用主路由文件包含各应用的子路由数据。
- Django在接收到一个请求时,从主路由文件中的urlpatterns列表中以由上至下的顺序查找对应路由规则,如果发现规则为include包含,则再进入被包含的urls中的urlpatterns列表由上至下进行查询。
- 在使用include函数定义路由时,可以使用namespace参数定义路由的命名空间;在定义普通路由时,可以使用name参数指明路由的名字 。
-
在视图函数中, 我们可以根据reverse进行反解析,获取当前视图函数的路径。
配置完成后,就可以进行具体的开发了。
5 静态文件配置
静态文件我们会放在一个静态(static)文件夹中, 统一管理我们在html页面中调用时,需要指定静态文件的路径,故, Django中提供了一种用于配置静态文件路径的解析方式。静态文件可以放在项目根目录下,也可以放在应用的目录下,由于有些静态文件在项目中是通用的,所以推荐放在项目的根目录下,方便管理。
项目中的CSS、图片、js以及html等看做静态文件,为了提供静态文件访问路径,我们需要在项目的settings.py文件中配置两个参数:
在项目根目录下创建static_files目录来保存静态文件:
在demo/settings.py中修改静态文件的两个参数为static
此时在static_files添加的任何静态文件都可以使用网址 /static/文件在static_files中的路径 来访问了。