共计 2868 个字符,预计需要花费 8 分钟才能阅读完成。
摘要 : 本文面向:有 python 基础,刚接触 web 框架的初学者。
环境:Ubuntu 16.10 python2.7.12 pycharm 专业版 Django 1.87 版 pip2.7
本文前面三小节有抄袭嫌疑,是网友们确实描述的够精准,拿来也无妨。
1. Django 简介
百度百科:开放源代码的 Web 应用框架,由 Python 语言编写 blabla......
重点:一个大而全的框架,啥都替你考虑好了。
具体介绍 Django 之前,必须先介绍 WEB 框架等概念。
web 框架:别人已经设定好的一个 web 网站模板,你学习它的规则,然后“填空”或“修改”成你自己需要的样子。
一般 web 框架的架构是这样的:
其它基于 python 的 web 框架,如 tornado、flask、webpy 都是在这个范围内进行增删裁剪的。例如 tornado 用的是自己的异步非阻塞“wsgi”,flask 则只提供了最精简和基本的框架。Django 则是直接使用了 WSGI,并实现了大部分功能。
2. MVC/MTV 介绍
MVC 百度百科:全名 Model View Controller,是模型 (model)-视图(view)-控制器(controller) 的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。
通俗解释:一种文件的组织和管理形式!不要被缩写吓到了,这其实就是把不同类型的文件放到不同的目录下的一种方法,然后取了个高大上的名字。当然,它带来的好处有很多,比如前后端分离,松耦合等等,就不详细说明了。
模型(model):定义数据库相关的内容,一般放在 models.py 文件中。
视图(view):定义 HTML 等静态网页文件相关,也就是那些 html、css、js 等前端的东西。
控制器(controller):定义业务逻辑相关,就是你的主要代码。
MTV: 有些 WEB 框架觉得 MVC 的字面意思很别扭,就给它改了一下。view 不再是 HTML 相关,而是主业务逻辑了,相当于控制器。html 被放在 Templates 中,称作模板,于是 MVC 就变成了 MTV。这其实就是一个文字游戏,和 MVC 本质上是一样的,换了个名字和叫法而已,换汤不换药。
3. 标 Django 的 MTV 模型组织
目录分开,就必须有机制将他们在内里进行耦合。在 Django 中,urls、orm、static、settings 等起着重要的作用。一个典型的业务流程是如下图所示:
4. 学习 Django 的什么?
1. 目录结构规范
2. urls 路由方式
3. settings 配置
4. ORM 操作
5. jinja2 模板渲染
6. 其它
5. 创建一个 APP
前面我们已经学过了如何用 Nginx+uwsgi 搭建 django 运行环境,现在我们进入到 django 的项目目录并建一个名为 blog 的 APP
cd ~/PythonEnv/django_project/
#创建 APP
django-admin.py startapp blog
第一步:修改下 django_project 目录中 urls.py 的路由,即文件:/home/chin/PythonEnv/django_project/django_project/urls.py
这里的意思是当浏览器直接以 IP,未带任何参数访问时,默认访问的是 blog 中 urls.py 中写的路由地址
第二步:我们接下来要在 blog 目录中写一个 urls.py 文件,内容如下:
# coding:utf-8
from django.conf.urls import url
from . import views
urlpatterns = [ url(r'^$', views.index,name='index'),
]
第三步:编辑 /home/chin/PythonEnv/django_project/blog/views.py 文件,内容如下:
from django.shortcuts import render
# Create your views here.
def index(request):
return render(request, 'blog/index.html')
由于在 django 中 html 是用 jinja2 语法编写的模板,它是有固定的目录要求的,框架规定所有的 view 层文件都放在 templates 目录中,这里我们写了一个前缀目录 blog/,所以我们需要创建如下目录结构:
(PythonEnv) chin@chin-PC:~/PythonEnv/django_project$ tree blog
blog
├── admin.py
├── __init__.py
├── migrations
│ └── __init__.py
├── models.py
├── templates
│ └── blog
│ └── index.html
├── tests.py
├── urls.py
└── views.py
至于这里我们为什么要创建 blog 前缀,是有原因的,因为 django 的遍历规则是找所有的 APP 下的 templates 模板下的 html 文件,也就是说如果是其它 APP 中(如有一个名为 mysite 的 APP)调用 index.html 页面,而刚好 blog 作为第一个 APP 被遍历到了,就会直接用 blog/templates/index.html 页面了。这种做法有好处,也有不好的地方。好处就是其它 APP 可以很方便的跨 APP 调用公共页面,并继承该页面所有元素;不好的地方就是有时候排查问题起来比较费劲。所以我这里加上 app 的名字,目的就是为了保持 view 页面的独立性。
接下来,我们还需要在 index.html 中搞点事,内容如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Test</title>
</head>
<body>
<p> 欢迎来到果子的博客!</p>
</body>
</html>
第四步:在项目中注册下 app,修改下文件:/home/chin/PythonEnv/django_project/django_project/settings.py
其中 ALLOWED_HOSTS 中可以指定可以访问的 IP 地址,我这里写的是 '"' 表示所有人都可以访问,如果你的 nginx 中配置了所有人可以访问 WEB 服务器,但这里没放开,也是不可以访问的哦,千万要注意!接着在 INSTALLED_APPS 中注册下 APP,即 blog。
6. 重启 uwsgi
千万要记得重启 uwsgi 哦,前面我们已经写好了一个启动脚本,并放到了沙盒环境的 bin 目录下,我们只需要在沙盒环境中直接执行如下命令即可:
uwsgid restart
7. 开始访问
在浏览器中输入:http://192.168.1.10/
以下是效果图:
