Django是一个开放源代码的Web应用框架,由Python写成。采用了MVC的框架模式,即模型M,视图V和控制器C。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是CMS(内容管理系统)软件。并于2005年7月在BSD许可证下发布。这套框架是以比利时的吉普赛爵士吉他手Django Reinhardt来命名的。

框架介绍

Django 框架的核心组件有:
  1. 用于创建模型的对象关系映射
  2. 为最终用户设计的完美管理界面
  3. 一流的 URL 设计
  4. 设计者友好的模板语言
  5. 缓存系统。

架构设计

编辑

Django是一个基于MVC构造的框架。但是在Django中,控制器接受用户输入的部分由框架自行处理,所以 Django 里更关注的是模型(Model)、模板(Template)和视图(Views),称为 MTV模式。它们各自的职责如下:
层次
职责
模型(Model),即数据存取层
处理与数据相关的所有事务: 如何存取、如何验证有效性、包含哪些行为以及数据之间的关系等。
视图(View),即表现层
处理与表现相关的决定: 如何在页面或其他类型文档中进行显示。
模板(Template),即业务逻辑层
存取模型及调取恰当模板的相关逻辑。模型与模板的桥梁。
从以上表述可以看出Django 视图不处理用户输入,而仅仅决定要展现哪些数据给用户,而Django 模板 仅仅决定如何展现Django视图指定的数据。或者说, Django将MVC中的视图进一步分解为 Django视图 和 Django模板两个部分,分别决定 “展现哪些数据” 和 “如何展现”,使得Django的模板可以根据需要随时替换,而不仅仅限制于内置的模板。
至于MVC控制器部分,由Django框架的URLconf来实现。URLconf机制是使用正则表达式匹配URL,然后调用合适的Python函数。URLconf对于URL的规则没有任何限制,你完全可以设计成任意的URL风格,不管是传统的,RESTful的,或者是另类的。框架把控制层给封装了,无非与数据交互这层都是数据库表的读,写,删除,更新的操作.在写程序的时候,只要调用相应的方法就行了,感觉很方便。程序员把控制层东西交给Django自动完成了。 只需要编写非常少的代码完成很多的事情。所以,它比MVC框架考虑的问题要深一步,因为我们程序员大都在写控制层的程序。现在这个工作交给了框架,仅需写很少的调用代码,大大提高了工作效率。
 

设计哲学

编辑

Django的主要目的是简便、快速的开发数据库驱动的网站。它强调代码复用,多个组件可以很方便的以“插件”形式服务于整个框架,Django有许多功能强大的第三方插件,你甚至可以很方便的开发出自己的工具包。这使得Django具有很强的可扩展性。它还强调快速开发和DRY(Do Not Repeat Yourself)原则。
Django基于MVC的设计十分优美:
  • 对象关系映射 (ORM,object-relational mapping):以Python类形式定义你的数据模型,ORM将模型与关系数据库连接起来,你将得到一个非常容易使用的数据库API,同时你也可以在Django中使用原始的SQL语句。
  • URL 分派:使用正则表达式匹配URL,你可以设计任意的URL,没有框架的特定限定。像你喜欢的一样灵活
  • 模版系统:使用Django强大而可扩展的模板语言,可以分隔设计、内容和Python代码。并且具有可继承性。
  • 表单处理:你可以方便的生成各种表单模型,实现表单的有效性检验。可以方便的从你定义的模型实例生成相应的表单。
  • Cache系统:可以挂在内存缓冲或其它的框架实现超级缓冲 -- 实现你所需要的粒度。
  • 会话(session),用户登录与权限检查,快速开发用户会话功能。
  • 国际化:内置国际化系统,方便开发出多种语言的网站。
  • 自动化的管理界面:不需要你花大量的工作来创建人员管理和更新内容。Django自带一个ADMIN site,类似于内容管理系统

工作机制

编辑

1.用manage .py runserver 启动Django服务器时就载入了在同一目录下的settings .py。该文件包含了项目中的配置信息,如前面讲的URLConf等,其中最重要的配置就是ROOT_URLCONF,它告诉Django哪个Python模块应该用作本站的URLConf,默认的是urls .py

工作机制
2.当访问url的时候,Django会根据ROOT_URLCONF的设置来装载URLConf。
3.然后按顺序逐个匹配URLConf里的URLpatterns。如果找到则会调用相关联的视图函数,并把HttpRequest对象作为第一个参数(通常是request)
4.最后该view函数负责返回一个HttpResponse对象。
 
 
下面进行安装介绍:

环境说明

操作系统:CentOS 7  64-bit

安装基础环境

  1. yum -y install gcc make wget

安装Python

yum -y install zlib-devel openssl-devel

方法一:   yum install python*     //centos7中默认自带python2.7.5,也可使用下面源码安装。

方法二:
【 wget https://www.python.org/ftp/python/2.7.12/Python-2.7.12.tgz
tar xzf Python-2.7.12.tgz
cd Python-2.7.12/
./configure --prefix=/usr/local/python CFLAGS=-fPIC
make && make install
cd ../

将Python加入环境变量

在/etc/profile文件末尾添加以下内容:

  1. export PATH=/usr/local/python/bin:$PATH

然后使配置文件生效:

  1. . /etc/profile

安装setuptools

  1. 方法一: yum install python-setuptools
    方法二:
    wget https://pypi.python.org/packages/6b/dd/a7de8caeeffab76bacf56972b3f090c12e0ae6932245abbce706690a6436/setuptools-28.3.0.tar.gz
    tar xzf setuptools-28.3.0.tar.gz
    cd setuptools-28.3.0/
    python setup.py install
    cd ../

安装pip

  1. wget https://pypi.python.org/packages/e7/a8/7556133689add8d1a54c0b14aeff0acb03c64707ce100ecd53934da1aa13/pip-8.1.2.tar.gz
    tar xzf pip-8.1.2.tar.gz
    cd pip-8.1.2/
    python setup.py install
    cd ../

安装Apache

安装apr

  1. wget http://apache.fayea.com/apr/apr-1.5.2.tar.bz2
    tar xjf apr-1.5.2.tar.bz2
    cd apr-1.5.2/
    ./configure
    make && make install
    cd ../

安装apr-util

  1. wget http://apache.fayea.com/apr/apr-util-1.5.4.tar.bz2
    tar xjf apr-util-1.5.4.tar.bz2
    cd apr-util-1.5.4/
    ./configure --with-apr=/usr/local/apr/
    make && make install
    cd ../

安装pcre

  1. yum -y install gcc-c++
    方法一:yum install pcre
    方法二:
    wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.39.tar.bz2
    tar xjf pcre-8.39.tar.bz2
    cd pcre-8.39/
    ./configure --prefix=/usr/local/pcre
    make && make install
    cd ../

备注:不安装gcc-c++的话会报错。

安装httpd

  1. yum -y install perl
    方法一: yum install http*
    方法二:
    wget http://apache.fayea.com/httpd/httpd-2.4.23.tar.bz2
    tar xjf httpd-2.4.23.tar.bz2
    cd httpd-2.4.23/
    ./configure --prefix=/usr/local/httpd --with-pcre=/usr/local/pcre
    make && make install
    cd ../

备注:不安装perl的话,安装mod_wsgi时会报错。

将Apache加入环境变量

在/etc/profile文件末尾添加以下内容:

  1. export PATH=/usr/local/httpd/bin:$PATH

然后使配置文件生效:

  1. . /etc/profile

以上apache可以改成nginx

安装nginx

  1. yum install nginx*

安装mod_wsgi

  1. 方法一: yum install mod_wsgi
    方法二:wget https://pypi.python.org/packages/28/a7/de0dd1f4fae5b2ace921042071ae8563ce47dac475b332e288bc1d773e8d/mod_wsgi-4.5.7.tar.gz
    tar xzf mod_wsgi-4.5.7.tar.gz
    cd mod_wsgi-4.5.7/
    ./configure --with-apxs=/usr/local/httpd/bin/apxs --with-python=/usr/local/python/bin/python
    make && make install
    chmod 755 /usr/local/httpd/modules/mod_wsgi.so
    cd ../

安装Django

  1. 方法一:yum install python-django
    方法二:wget https://pypi.python.org/packages/8a/09/46f790104abca7eb93786139d3adde9366b1afd59a77b583a1f310dc8cbd/Django-1.10.2-py2.py3-none-any.whl
    pip install Django-1.10.2-py2.py3-none-any.whl

安装MySQLdb(连接库使用的是mysql)

  1. yum -y install mysql-devel
    pip install MySQL-python

配置Django

将你开发好的Django程序上传到服务器,我这里上传到/wwwroot/目录。

这里面有个文件特别关键,能否正常运行就看它了,它就是wsgi.py,下面是我的文件的内容,供读者参考:

import os

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

注意:前两句需要自己添加,如果没有这两句,你的程序就不能正常运行了,后面的是Django自动生成的。

配置Nginx

  1. location / {
  2. uwsgi_send_timeout ;
  3. uwsgi_connect_timeout ;
  4. uwsgi_read_timeout ;
  5. include /etc/nginx/uwsgi_params;
  6. uwsgi_pass 127.0.0.1:;
  7. }
  8. location /static {
  9. alias /wwwroot/static;
  10. }

如果选用apache:   配置Apache

启用虚拟主机配置文件

编辑/usr/local/httpd/conf/httpd.conf文件,找到下面这句并取消注释:

  1. #Include conf/extra/httpd-vhosts.conf

在一堆以LoadModule开头的段落下添加一行:

  1. LoadModule wsgi_module modules/mod_wsgi.so

修改虚拟主机配置文件

编辑/usr/local/httpd/conf/extra/httpd-vhosts.conf文件,将原来的配置全部注释掉(已经注释过的就不用再注释了),然后在末尾添加以下内容:

  1. <VirtualHost *:80>
        DocumentRoot "/wwwroot/mysite"
        WSGIScriptAlias / "/wwwroot/mysite/wsgi.py"
  2.  
  3.     <Directory "/wwwroot/mysite">
            AllowOverride All
            Require all granted
        </Directory>
    </VirtualHost>

注意:读者请根据自己的程序修改其中的路径。

最后启动Web服务并测试【启动nginx或apache】      使用Nginx,可启动nginx后,将wsgi启动,即可通过页面访问。

 
 

Django百科全书,非常详细的文档:http://python.usyiyi.cn/translate/django_182/index.html

django, CentOS7+nginx(apache)+mod_wsgi+Python+Django的更多相关文章

  1. CentOS+Apache+mod_wsgi+Python+Django

    前言 网上有关的教程千篇一律,都是无脑抄,自己都不验证一遍就直接复制,毫无意义,我通过官方文档和自己摸索,总结了一套教程. Django自带Web服务功能,但那只是方便开发调试,生产环境中一般将Dja ...

  2. windows下apache + mod_wsgi + python部署flask接口服务

    windows下apache + mod_wsgi + python部署flask接口服务 用python3安装虚拟环境 为啥要装虚拟环境? 原因1:安装虚拟环境是为了使项目的环境和全局环境隔离开,在 ...

  3. Apache mod_wsgi部署Django项目

    学习python web开发,Django部署备忘 1.下载mod_wsgi,下载路径如下:http://code.google.com/p/modwsgi/downloads/list挑选For 2 ...

  4. 11.nginx upload module + python django 后台 实现视频上传与切片

    1.需求:支持视频上传并切片,支持通过m3u8文件播放 2.视频切片的上一节已经谈过,这一节主要是视频上传的处理 第一步:upload-module模块安装 -----------首先下载upload ...

  5. Django 部署(Nginx)

    本文主要讲解 nginx + uwsgi socket 的方式来部署 Django,比 Apache mod_wsgi 要复杂一些,但这是目前主流的方法. 推荐:使用Code Studio 云端开发, ...

  6. Django-Multitenant,分布式多租户数据库项目实战(Python/Django+Postgres+Citus)

    Python/Django 支持分布式多租户数据库,如 Postgres+Citus. 通过将租户上下文添加到您的查询来实现轻松横向扩展,使数据库(例如 Citus)能够有效地将查询路由到正确的数据库 ...

  7. centos7安装python,mariaDB,django,nginx

    0,安装centos7 centos默认不开启网卡,需要在安装时将ens33设置为on,或者后续通过vi ifcfg-ens33,找到onboot,设置为yes ssg登陆centos7时,如果提示W ...

  8. CentOS7.4 部署 Django + Python3 + Apache + Mod_wsgi

    安装环境 Remote: CentOS 7.4 x64 (django.example.com) Python: Python3.6.5 Apache: Apache 2.4.6 Mod_wsgi: ...

  9. Cenos(6.6/7.1)下从源码安装Python+Django+uwsgi+nginx到写nginx的环境部署(一)

    梳理下这几个的关系: centos是redhat的社区版操作系统. Python2.7.5是开发语言(centos6.5下自带的python是2.6.6版本,所以需要源码更新,而centos7.1下面 ...

随机推荐

  1. JavaEE之HttpServletRequest

    HttpServletRequest //要下载的这个文件的类型--客户端会通过文件的MIME类型去区分类型 response.setContentType( getServletContext(). ...

  2. [转]webapi部署在IIS7.5报404的解决方案

    1.iis 目录权限设置 2.转自:http://www.cnblogs.com/youlies/p/6042169.html 在web.config添加如下节点 <system.webServ ...

  3. Spring 框架(二)

    1AOP 1.1 AOP介绍 1.1.1 什么是AOP l 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功 ...

  4. 大V云集!参加首届阿里巴巴在线技术峰会的八大理由

    由阿里巴巴集团.阿里巴巴技术协会(ATA)和阿里云云栖社区联合举办的首届阿里巴巴在线技术峰会(Alibaba Online Technology Summit)将于7月19日-21日20:00-21: ...

  5. VC++ 6.0如何创建与调用动态链接库

    原文:http://blog.csdn.net/wanghaihao_1/article/details/51098451 1.静态链接库与动态链接库区别: 静态链接库:lib中的指令被直接包含在最终 ...

  6. 【Python】猜数小游戏(文件操作)

    人生苦短,我用Python 关键词 1.多用户 2.字典记录所有成绩 3.每次游戏轮数&总游戏次数&平均每次游戏需要多少轮 字典Dictionary.列表List.元组Tuple差异化 ...

  7. 第四次作业——第一次scrum冲刺

    1.小组第一次冲刺任务 对Github上的HUSTOJ开源项目进行Fork,搭建基本环境 2.用户需求 (1)部分基本功能显示在首页 (2)能够提交题目并判题,并对自己所提交的题目正确性进行反馈,能够 ...

  8. content provider其中操作文件的函数

    此类函数还是有杀伤力的 1.openAssetFile(Uri uri, String mode)This is like openFile(Uri, String), but can be impl ...

  9. Echarts实现隐藏x轴,y轴,刻度线,网格

    "yAxis": [ { //就是一月份这个显示为一个线段,而不是数轴那种一个点点 "show" : true, "boundaryGap" ...

  10. deb文件怎么安装

    deb 是 ubuntu .debian 的格式.rpm 是 redhat .fedora .suse 的格式.deb是debian发行版的软件包ubuntu是基于debian 发行的 所有可以用.d ...