美文网首页
02-Django基本流程

02-Django基本流程

作者: 王梓懿_1fbc | 来源:发表于2018-10-21 11:48 被阅读5次

    一、Django简介

    Django是用Python开发的一个免费开源的Web框架,可以用于快速搭建高性能,优雅的网站!

    初次发布于2005年7月,并于2008年发布了第一个正式版本1.0。

    官方文档: https://www.djangoproject.com/

    二、Django特点

    • 强大的数据库功能: 拥有强大的数据库操作接口(QuerySet API),如需要也能执行原生SQL。
    • 自带强大的后台: 几行简单的代码就让你的网站拥有一个强大的后台,轻松管理内容!
    • 优雅的网址: 用正则匹配网址,传递到对应函数,随意定义,如你所想!
    • 模板系统: 强大,易扩展的模板系统,设计简易,代码,样式分开设计,更容易管理。
      (注:前后端分离时,也可以用Django开发API,完全不用模板系统。)
    • 缓存系统,与Memcached, Redis等缓存系统联用,更出色的表现,更快的加载速度。
    • 国际化,完全支持多语言应用,允许你定义翻译的字符,轻松翻译成不同国家的语言。

    三、MVC模式

    MVC是一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件中,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。

    - Model(模型)
        应用程序中用于处理应用程序数据逻辑部分;
        通常模型对象负责在数据库中存取数据;
    - View(视图)
        应用程序中处理数据显示部分;
        通常视图是依据模型数据创建的;
    - Controller(控制器)
        应用程序中处理用户交互部分;
        通常控制器负责从视图中读取数据,控制用户输入,并向模型发送数据;
    
    

    优点: 降低各个功能模块之间的耦合性,方便变更,更容易重构代码,最大程度上实现代码的重用。

    四、MTV模式

    本质上MTV与MVC模式没有什么区别,也是各组件之间为了保持松耦合关系,只是定义上有些不同。

    - Model(模型)
        负责业务对象与数据库对象(ORM)
    - Template(模板)
        负责如何把页面展示给用户
    - View(视图)
        负责业务逻辑,并在适当的时候调用Model和Template
    
    

    Django还有一个url分发器,它的作用是将一个个URL的页面请求分发给不同的view处理,view再调用相应的Model和Template。

    五、Django环境搭建

    • Django版本选择

      Django 1.5.x 支持 Python 2.6.5 Python 2.7, Python 3.2 和 3.3.
      Django 1.6.x 支持 Python 2.6.X, 2.7.X, 3.2.X 和 3.3.X
      Django 1.7.x 支持 Python 2.7, 3.2, 3.3, 和 3.4 (注意:Python 2.6 不支持了)
      Django 1.8.x 支持 Python 2.7, 3.2, 3.3, 3.4 和 3.5.  (长期支持版本 LTS)
      Django 1.9.x 支持 Python 2.7, 3.4 和 3.5. 不支持 3.3 了
      Django 1.10.x 支持 Python 2.7, 3.4 和 3.5
      Django 1.11.x 支持 Python 2.7, 3.4, 3.5 和 3.6(长期支持版本 LTS)
      Django 2.0.x 支持 Python 3.4, 3.5 和 3.6 (注意,不再支持 Python 2)
      
      
    • pip安装(如果有直接跳过)

      - 下载get-pip.py文件(Linux, Mac OSX, Windows都可用) 
        https://bootstrap.pypa.io/get-pip.py
      - 安装(在终端中运行)
        $ python get-pip.py
      备注:
        当Python2.x和Python3.x共存的时候要区分是哪个版本需要安装;
      
      

      pip更新(Linux或MacOS): pip install -U pip

      pip更新(Windows): python -m pip install -U pip

    • 安装Django

      - 安装
        $ pip install Django==1.11.4
      - 验证是否成功()
        进入到python环境(终端中输入python)
        >>> import django
        >>> django.get_version()
        '1.11.4'
      
      

      操作时,请切换到python3的虚拟环境中!

    六、Django项目创建

    - 新建Django项目:
        $ django-admin startproject projectName
    
    - 目录层级说明:
        manage.py 一个命令行工具,可以使我们多种方式对Django项目进行交互
        projectName/__init__.py 一个空文件,告诉python这个目录被看做一个python包(有这个能称之为包)
        projectName/settings.py 项目的配置文件
        projectName/urls.py  项目URL声明(路由器)
        projectName/wsgi.py    项目与WSGI兼容的Web服务器入口(网关接口,通常用在现线上环境部署)
    
    - 项目的运行:
        $ python manage.py runserver 
        $ python manage.py runserver 0.0.0.0:8000
        $ python manage.py runserver 0:8000  # 0.0.0.0简写方式
    
    - settings.py项目配置文件
        BASE_DIR 项目根目录
        SECRET_KEY 秘钥
        DEBUG 调试的开启
        ALLOWED_HOSTS 允许访问的主机
        INSTALLED_APPS 安装的应用
        MIDDLEWARE 中间件
        ROOT_URLCONF 站点url配置
        TEMPLATES 模板
        WSGI_APPLICATION wsig应用
        DATABASES 数据库
        AUTH_PASSWORD_VALIDATORS 密码验证规则
        LANGUAGE_CODE 语言(中文: zh-hans)
        TIME_ZONE 时区 (中国时区: Asia/Shanghai)
    
    - 站点管理的汉化版(在settings.py中替换以下内容即可)
        LANGUAGE_CODE = 'en-us' 替换 LANGUAGE_CODE = 'zh-Hans'
        TIME_ZONE = 'UTC' 替换 TIME_ZONE = 'Asia/Shanghai'
    
    

    备注: Linux或Mac下,直接在终端中操作;而在Windows中在cmd中操作(开始 -> 搜索cmd)

    Linux中输入tree可以看到具体的目录结构(树状)

    七、创建应用

    要先进入项目目录下,cd projectName 然后执行下面的命令:

    $ python3 manage.py startapp appName
    
    项目文件说明: 
      admin.py 站点配置
      models.py 模型
      views.py 视图
    
    

    其实一个项目中可以创建多个应用;
    sqlite是轻量级小型数据库(嵌入级数据库),在Django中默认使用的就是sqlite【一般在手机APP中都会使用到这个sqlite】

    八、激活应用

    settings.py文件中,将appName应用加入到INSTALL_APPS选项中.

    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'appName'   # 添加自己的应用
    ]
    
    

    请求流程: 用户请求 -> urls -> views -> templates -> 用户响应 【从后往前写】

    九、设计表结构

    • 班级表

      表名: grades
      字段: 序号id、班级名gname、开班时间gdate、男生数量gboynum、女生数量ggirlnum、是否删除isdel
      
      
    • 学生表

      表名: students
      字段: 序号id、学生名sname、性别ssex、年龄sage、班级sclass、  简介sbrief、是否删除isdel
      
      

    十、配置数据库

    • __init__中添加两行代码 (确保安装mysql,另外需要pip3 install pymysql)

      import pymysql
      pymysql.install_as_MySQLdb()
      
      

      python3安装的是PxMysql (和python2是不一样的)

    • settings.py中修改默认数据库

      DATABASES = {
        'default': {
            # 修改为mysql
            'ENGINE': 'django.db.backends.mysql',
            # 必须先创建有对应的数据库
            'NAME': 'zyz',
            # 用户名
            'USER': 'root',
            # 密码
            'PASSWORD': '123456’,
            # 主机
            'HOST': '127.0.0.1',
            # 端口号
            'POST': '3306’
        }
      }
      
      

      Django默认使用SQLine数据库

    十一、定义模型

    • 班级表

      # 班级表Grades
      class Grades(models.Model):
        # 对应字段,以及字段类型
        # id          = models.IntegerField()
        gname       = models.CharField(max_length=30)
        gdate       = models.DateField()
        gboynum     = models.IntegerField()
        ggirlnum    = models.IntegerField()
        isdel       = models.BooleanField(default=False)
      
      

      需要引入from django.db import models。模型类要继承models.Model类。

    • 学生表

      # 学生表Students
      class Students(models.Model):
        # 在没有添加主键时,它会在生成时自动添加主键
        # id          = models.IntegerField()
        sname       = models.CharField(max_length=30)
        ssex        = models.CharField(max_length=10)
        sage        = models.IntegerField()
        sbrief      = models.CharField(max_length=50)
        isdel       = models.BooleanField(default=False)
      
        # 关联外键(学生都会有一个班级)
        sclass = models.ForeignKey('Grades')
      
      

    十二、数据库中生成对应表单

    • 生成迁移文件

      $ python manage.py makemigrations
      
      备注: 在migrations目录中生成一个迁移文件,此时数据库中还没生成表单
      
      
    • 执行迁移

      $ python manage.py migrate
      
      备注: 相当于执行了MySQL语句创建了表单(appname_students、appname_grades)
      
      

      就算是没有创建模型,也是要执行迁移,因为除了自己系统需要在数据库中生成对应的表单!

    十三、数据库表单操作

    - 查询所有数据
        Grades.objects.all()
        备注: 在模型类中,其实会有一个隐藏属性objects
        备注: 添加数据本质,就是创建一个模型类的对象实例
    
    - 添加数据
        # 创建对象
        stu1 = Students()
        # 对象属性
        stu1.sname = '哈哈'
        # 保存
        stu.save()
    
    - 查看数据(查看对象)
        Grades.objects.get(pk=1)
        Grades.objects.get(pk=2)
    
    - 修改数据(修改对象属性)
        g = Grades.objects.get(pk=1)
        g.gboynum = 70  
        g.save()
    
    - 删除数据
        g.delete()  # 物理删除,即数据库中表单数据被删除
    
    - 关联对象
        # 获取到班级对象 (pk即是id那个字段)
        grade = Grades.objects.get(pk=2)
        # 添加学生对象
        stu2 = Students()
        stu2.sname = '李花花'
        stu2.ssex = '女'
        stu2.sage = 18
        stu2.sbrief = '你负责赚钱养家,我负责貌美如花.'
        stu2.sclass = grade
        stu2.save()
    
    - 获取关联对象
        语法: 
            对象.关联的类名小写_set.all()
        例如: 
             grade.students_set.all()
        备注: 在班级中,想要获取某个班级中关联的学生信息
    
        需求: python04班级存在,   如何快速关联上快速创建对应学生?            # 可以直接通过以下方法创建,并且不需要调用保存 (但班级是python04而不是python05)
        # 其实就是直接grade和创建的学生对象关联起来了
        stu3 = grade.students_set.create(sname='王八',ssex='男',sage=20,sbrief='哈哈,咬我啊..')
    
    

    十四、视图

    - 方式一
    def hello(request):
        return HttpResponse('hello')
    
    - 方式二
    def hello(request):
        return render(request, 'hello.html')
    
    - 模板渲染(带参数)
    def student(request):
        students = Student.objects.all()
        return render(request, 'students.html', context={'student_data': students})
    
    

    十五、启动服务器

    语法:
        python3 manage.py runserver ip:port
    例如:
        python3 manage.py runserver
    备注:
        IP可以不写,代表即是本机IP
        端口号默认是8000
        启动成功后,在浏览器可以看到”It worked!”
    说明:
        这是一个纯python写的轻量级web服务器,仅仅在开发测试阶段中使用
    
    

    作者:西门奄
    链接:https://www.jianshu.com/u/77035eb804c3
    來源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

    相关文章

      网友评论

          本文标题:02-Django基本流程

          本文链接:https://www.haomeiwen.com/subject/decbzftx.html