Django

Django简介

Python的WEB框架有Django、Tornado、Flask 、Zope TurboGears、Web2py(Webpy)、Pylons等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM、模型绑定、模板引擎、缓存、Session等诸多功能。

 

  Django框架的优缺点:

  优点:
    
1,开源框架,有完美的文档支持
     2,优雅的URL,完整的路由系统

     3,功能完善、要素齐全:自带大量常用工具和框架(比如分页,auth,权限管理), 适合快速开发企业级网站。

     4,完善的文档:经过十多年的发展和完善,Django有广泛的实践案例和完善的在线文档。开发者遇到问题时可以搜索在线文档寻求解决方案。

     5,强大的数据库访问组件:Django的Model层自带数据库ORM组件,使得开发者无须学习SQL语言即可对数据库进行操作。

     6,Django先进的App设计理念: App是可插拔的,是不可多得的思想。不需要了,可以直接删除,对系统整体影响不大。

     7,自带台管理系统admin:只需要通过简单的几行配置和代码就可以实现一个完整的后台数据管理控制平台。

     8,Django debug信息详尽: 很容易找出代码错误所在。


  缺点:
    1,高内聚,低耦合,耦合度偏高
       内聚:尽量让模块功能单一化,方便使用和调用
       耦合:模块之间的依赖关系

     2, 大包大揽: 对于一些轻量级应用不需要的功能模块Django也包括了,不如Flask轻便。

    3,过度封装: 很多类和方法都封装了,直接使用比较简单,但改动起来就比较困难。

    4,性能劣势: 与C, C++性能上相比,Django性能偏低,当然这是python的锅,其它python框架在流量上来后会有同样问题。

    5,模板问题: django的模板实现了代码和样式完全分离,不允许模板里出现python代码,灵活度对某些程序员来说可能不够。

    

  MVC和MTV    

  Web服务器开发领域里著名的MVC模式,将web应用分为以下三层:
        模型(Model)
        视图(View)
        控制器(Controller)
    以上三层之间以一种插件式的、松耦合的方式连接在一起:
        模型负责业务对象与数据库的映射(ORM)
        视图负责如何把页面展示给用户(HTML)
        控制器接受用户的输入调用模型和视图完成用户的请求。

  Django的MTV模式本质上和MVC是一样的,也是为了各组件间保持松耦合关系,只是定义上有些许不同,Django的MTV分别是值:

    M 代表模型(Model): 负责业务对象和数据库的关系映射(ORM)。

    T 代表模板 (Template):负责如何把页面展示给用户(html)。

    V 代表视图(View):   负责业务逻辑,并在适当时候调用Model和Template。

      除了以上三层之外,还需要一个URL分发器,它的作用是将一个个URL的页面请求分发给不同的View处理,View再调用相应的Model和Template。

      一般是用户通过浏览器向我们的服务器发起一个请求(request),这个请求回去访问视图函数,(如果不涉及到数据调用,那么这个时候视图函数返回一个模板也就是一个网页给用户),

      视图函数调用模型,模型去数据库查找数据,然后逐级返回,视图函数把返回的数据填充到模板中空格中,最后返回网页给用户。

 

  Django的全貌

    uels.py:网址入口,关联到对应的views.py中的一个函数(或者generic类),访问网址就对应一个函数。

    views.py:处理用户发出的请求,从urls.py中对应过来, 通过渲染templates中的网页可以将显示内容,比如登陆后的用户名,用户请求的数据,输出到网页。

    models.py:与数据库操作相关,存入或读取数据时用到这个,当然用不到数据库的时候 你可以不使用。

    forms.py:表单,用户在浏览器上输入数据提交,对数据的验证工作以及输入框的生成等工作,当然你也可以不使用。

    templates文件夹

    admin.py:后台,可以用很少量的代码就拥有一个强大的后台。

    settings.py:Django 的设置,配置文件,比如 DEBUG 的开关,静态文件的位置等。

 

  Django的底层原理的基本流程:     

     1,用户通过浏览器请求一个页面(wsgi)
     2,请求到达Request Middlewares中间件,中间件对request做一些预处理或者response请求
     3,URLConf通过urls.py文件和请求的URL找到响应的视图函数(view)
     4,View Middlewares被访问,它同样可以对request做一些处理或者直接返回response对象6,
     5,调用View中的视图函数
     6,View中的方法可以选择性的通过Models访问底层的数据
     7,所有的Model-to-DB的交互都是通过manager完成的
     8,如果需要,Views可以使用一个特殊的Context
     9,Context被传给Template用来生成页面
         a,Template使用Fileters和Tags去渲染输出
         b,输出被返回到View
         c,HTTPResponse被发送到Response Middlewares
         d,任何Response Middlewares都可以丰富response或者返回一个完全不同的response
         d,Response返回到浏览器,呈现给用户

下载安装

  1,下载Django  

     方式一:在命令行输入:pip3 install  django

       pip install django==1.11.9 -i http://pypi.hustunique.org/simple   指定版本号,指定国内镜像

     方式二:用pycharm安装

     方式三:用pycharm的Terminal的命令行安装

  2,创建Django project

     django-admin.py startproject mysite

  3,在mysite目录下创建应用

     python manage.py startapp blog

  4,启动django项目

     python manage.py runserver 8001

  5,静态文件的配置

     新建一个目录叫:static,我们的css文件,js文件,图片文件都放在这下面

     STATIC_URL = '/static/'
     STATICFILES_DIRS = [
          os.path.join(BASE_DIR, 'static'),
      ]

  6,Django请求的生命周期

  

基本配置

  1,创建django程序

    终端命令:django-admin startproject sitename (在当前目录下创建一个Django程序) 
    IDE创建Django程序时,本质上都是自动执行上述命令

 

    其他常用命令:

    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 (查看命令列表)

  2,配置文件 

    a、数据库 
    支持SQLite 3(默认)、PostgreSQL 、MySQL、Oracle数据库的操作

    

    # 默认是SQLit 3 的配置
     DATABASES = {
         'default': {
             'ENGINE': 'django.db.backends.sqlite3',
             'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        }
     }
     # MySQL的配置
     DATABASES = {
         'default': {
         'ENGINE': 'django.db.backends.mysql',
         'NAME':'dbname',   #注意这里的数据库应该以utf-8编码
         'USER': 'xxx',
         'PASSWORD': 'xxx',
         'HOST': '',
         'PORT': '',
         }
     }
    # PostgreSQL配置
    DATABASES = {
        'default': {
            'NAME': 'app_data',
            'ENGINE': 'django.db.backends.postgresql_psycopg2',
            'USER': 'XXX',
            'PASSWORD': 'XXX'
        }
    # Oracle配置
    DATABASES = {
         'default': {
            'ENGINE': 'django.db.backends.oracle',
            'NAME': 'xe',
            'USER': 'a_user',
            'PASSWORD': 'a_password',
            'HOST': '',
            'PORT': '',
        }
    }

    b,静态文件的添加

    # 首先在项目根目录下创建static目录
    # 接着在settings.py 文件下添加
 
    STATIC_URL = '/static/'  # 默认已添加,使用静态文件时的前缀
    STATICFILES_DIRS = (
            os.path.join(BASE_DIR,'static'), #行末的逗号不能漏
        )
 
    # 这样在template中就可以导入static目录下的静态文件啦
    # 例:
    <script src="/static/jquery-1.12.4.js"></script>

WEB应用

HTTP协议

web应用

项目

路由控制

视图层

模板层

模型层:单表操作,多表操作,常用字段和参数

组件:Django与Ajax分页器组件forms组件cookie与session组件中间件组件Auth模块 ContentType组件

Rest FrameworkRESTful规范   APIView   序列化组件  视图组件  解析器   认证组件   权限组件   频率组件   分页器  响应器    url控制器   版本控制

 

posted @ 2019-06-02 16:59  PTSD-追光者  阅读(257)  评论(0编辑  收藏  举报