摘要:本文面向:有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/
以下是效果图:
- 微信扫码赞助
- 支付宝赞助