Django学习之路(6)——开始写一个简单页面

2017/02/2120:34:30 发表评论


摘要本文面向:有python基础,刚接触web框架的初学者。

环境:Ubuntu 16.10    python2.7.12   pycharm专业版   Django 1.87版  pip2.7

本文前面三小节有抄袭嫌疑,是网友们确实描述的够精准,拿来也无妨。


1. Django简介


百度百科:开放源代码的Web应用框架,由Python语言编写blabla......

  重点:一个大而全的框架,啥都替你考虑好了。

  具体介绍Django之前,必须先介绍WEB框架等概念。

  web框架: 别人已经设定好的一个web网站模板,你学习它的规则,然后“填空”或“修改”成你自己需要的样子。

  一般web框架的架构是这样的:

web1.jpg

其它基于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等起着重要的作用。一个典型的业务流程是如下图所示:

web2.jpg


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

blob.png

这里的意思是当浏览器直接以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

blob.png

其中ALLOWED_HOSTS中可以指定可以访问的IP地址,我这里写的是'"'表示所有人都可以访问,如果你的nginx中配置了所有人可以访问WEB服务器,但这里没放开,也是不可以访问的哦,千万要注意!接着在INSTALLED_APPS中注册下APP,即blog。

6. 重启uwsgi

千万要记得重启uwsgi哦,前面我们已经写好了一个启动脚本,并放到了沙盒环境的bin目录下,我们只需要在沙盒环境中直接执行如下命令即可:

uwsgid restart

7. 开始访问

在浏览器中输入:http://192.168.1.10/

以下是效果图:

blob.png

  • 微信扫码赞助
  • weinxin
  • 支付宝赞助
  • weinxin

发表评论

您必须才能发表评论!