zoukankan      html  css  js  c++  java
  • Django框架-基础篇

    Django框架简介

    一、软件架构模式MVC和MTV

    1、MVC模型

    MVC(model view controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(model)、视图(view)和控制器(controller),具有耦合性低,重用性高,生命周期成本低等优点。

    2、MTV模型

    Django框架的设计模式借鉴了MVC框架的思想,也是分别三部分,来降低各个部分之间的耦合性。

    Django的MTV分别代表:

      Model(模型):和数据库相关的,负责业务对象与数据库的对象(ORM)

      Template(模板):放所有的html文件,负责如何把页面展示给用户

               模板语法:目的是将自变量(数据库的内容)如何巧妙的嵌入到html页面中

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

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

    3、MVC和MTCV的比较

    二、Django 下载安装

    查看django版本:

    cmd——>python -m django --version

    pycharm——> import django ; print(django.version)

       命令行下载安装:

    dos窗口中:
    pip  install  django== 1.11.15 # 等号后为版本号,不加的话默认安装最新版本
    pip  install  -i  https://pypi.doubanio.com/simple/  django==1.11.15(或者-i 指定源)

      pycharm的方式安装

    打开pycharm -->file -->settings --> project interpreter --> 点击右侧绿色加号 -->在弹出对话框中输入django -->选中specify version,指定下载版本,默认最高版  -->最后点击左下角 install package
    
    注:默认从https://pypi.python.org/simple下载模块,可更改国内的豆瓣源,点击install package 右侧的Manage Repositories 在里面添加其它的源,如https://pypi.doubanio.com/simple/

    详细见下图:

    三、创建Django项目对象

      命令行创建:

    切换目录到预存放项目文件的文件目录
    
    django-admin  startproject   项目名称
    
    eg:  django-admin  startproject    myblog

    生成目录结构如下:

    • manage.py------启动文件 (Django项目里面的工具,通过它可以调用Django shell的数目和数据库等)
    • settings.py------包含了项目的一些设置,包括数据库信息、调试标志以及其他一些工作的变量。
    • urls.py-----------路径与视图函数的映射关系
    • wsgi.py ...........帮我们实现socket,响应http请求

      注:命令行创建,不会创建templates模板【用于仅存放html文件,css,js等静态文件放到新建的static目录中】,

    需要自己在项目根目录即与manage.py同级目录下创建templates文件夹,且要到settings.py中修改templates的DIRS中加入os.path.join(BASE_DIR,'templates')

      pycharm方式创建

     打开pycharm--->file ---->new project ---> 选中django 

     

     创建完成后项目目录结构如下:

    注:上面app01为创建的一个应用,Mysite为创建django目录时,自动在项目名下建立一个同名的目录。

    四、启动Django项目

      1、命令行方式

    切换到django项目根目录下(含有manage.py 的文件)
    # 默认为本地,端口为8000
    python manage.py runserver    # 127.0.0.1:8000  
    # 可修改端口
    python manage.py runserver 80   # 127.0.0.1:80
    # 可修改ip和端口,4个零表示所有人都可以访问
    python manage.py runserver 0.0.0.0:80   # 0.0.0.0:80
    
    
    注:当项目上线后,需将ip和端口改为实际的

      2、pycharm方式

    一个项目就是一个包,不要单独执行某个py文件,而是运行整个项目

    五、创建应用

    注:因为一个项目要实现多个功能,因此一个Django项目可以分为很多个APP,用来隔离不同功能模块的代码

    如果不建立app也可以执行项目,即视图函数直接写在urls.py中,在settings.py中配置相关的模板,数据库信息,静态文件等信息。

      命令行创建app

    python manage.py  startapp  应用名
    
    eg: python manage.py startapp  app01

    执行命令后,项目目录下多出一个app01的文件夹,目录结构如下:

    app01/
        migrations         记录修改models即orm操作数据库的更改信息,每次更改都会在改目录下新建一个文件
            __init__.py     
        __init__.py        
        admin.py           
        apps.py            记录app信息,当在settings.py中注册app时是从此处找
        models.py          记录创建类【即相当如向数据库中创建表】在此处创建
        tests.py           
        views.py           本app自己的业务逻辑函数即视图函数写在这里

      使用PyCharm创建

    可以使用PyCharm的manage.py工具来执行命名。在主菜单栏中选择Tools,在下拉菜单中选择Run manage.py task,会出现如下图所示的工具对话框:


    在弹出的命令窗口中直接输入下面的命令便可创建app:

    startapp app01

    使用PyCharm的manage.py工具执行命令时,只用输入命令及参数即可,不再输入python manage.py了。

      注册app应用

    创建完app后,想要使用,需先注册才能使用,在django根目录下的settings.py文件中的INSTALLED_APPS模块中注册app信息

    格式如下:

    应用名.apps.应用名Config
    示例:【本质是导入应用目录下apps中为app建立的类】
    INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'classModel.apps.ClassmodelConfig' ]

    apps.py文件内容如下图:

    六、配置django项目与数据库mysql的连接

    1、安装mysql数据库软件

    2、安装 模块pymysql【python3.6后连接mysql只能用pymysql】

    cmd--> pip3  install pymysql

    3、手动连接数据库,创建一个库及创建一个操作此数据库的用户,赋予权限【django的ORM只能创建表,不能创建库】

    # 创建库
    create database db_name charset utf8;
    # 创建用户及赋予权限
    grant all privileges on db_name.* to 'userName'@'ip' identified by 'pwd';

    4、在Django项目总配置文件setting.py同级目录下[不是app下的__init__]的__init__.py文件中配置项目使用pymysql来操作数据库

    import pymysql
    
    pymysql.install_as_MySQLdb()       # 告知django使用pymysql来连接书库

    5、在Django项目总配置文件setting.py中的DATABASES模块中配置连接数据库相关信息,格式如下

    DATABASES = {
                        'default': {
                                'ENGINE': 'django.db.backends.mysql',  # 修改数据库引擎,默认为sqlite3文本数据库
                                'NAME': 'db_name',
                                'USER': '**',
                                'PASSWORD':'***',
                                'HOST':'ip',
                                'PORT': 3306,     # 注意是数字,不是字符串
                            }
                        }

    6、建表   在应用app的目录下的models.py中写类【必须继承models.Model类

    from django.db import models   # 需先导入models模块
    
    class Class(models.Model):
        id = models.AutoField(primary_key=True)
        name = models.CharField(max_length=20, unique=True)
    
        def __str__(self):
            return self.name
    
    # 在orm中
    类      对应数据库中的       表
    对象   对应数据库中的       记录(数据行)
    属性   对应数据库中的       字段

    7、建好类即表后,执行数据库迁移命令【让创建的表在数据库中生成】

    # 记录models.py中类是不是有变化 将变化的内容记录下来 
    python manage.py  makemigrations
    
    # 将model的变更同步到数据库中
    python  manage.py migrate
    
    
    注:执行第一条命令后models.py中的变化就会在到migrations目录中创建一个新的文件并将变化写入其中
    如果在原有表张增加字段的话,会提示要设置默认值,因为新的那列数据不能为空

    七、项目启动后相关配置

      1、更改setting.py 

    1.1、检查项目BASE_DIR是否如下:

    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

    1.2、配置ALLOWED_HOSTS可以运行本项目的ip,'*' 代表所有

    ALLOWED_HOSTS = ['*',‘127.0.0.1’,‘192.168.19.66’]
    注:如想别人访问你的网站,需在启动项目时将ip配置为0.0.0.0,如何将运行项目的ip写入上面列表,用户就可以通过你的主机ip访问你的网站了

    1.3、配置INSTALLED_APPS,为创建的应用app进行注册,不然操作数据库时报错

    格式:'app_name.Apps.AppName.Config' 或 ‘app_name’

    INSTALLED_APPS = [
        'classModel.apps.ClassmodelConfig'
    ]    

    1.4、配置中间件MIDDLEWARE,注释csrf,让后台能够接收所有的post请求,不关闭django将对不合法的post拦截403

    将 'django.middleware.csrf.CsrfViewMiddleware'注释掉,否则会出现下面的情况。

     

    注:上面的方案,不建议使用,不安全,可以在html文件中要发送post请求的from表单里加入{% csrf_token %}就不用注释上面的csrf的中间件了

    如下图:

    前端实际效果为:

    1.5、配置模块templates 中的DIRS需要检查下是否为空,如果为空,添加上os.path.join(BASE_DIR,'templates')

    命令创建的项目未创建模板templates目录,需自己创建。

    这是模板中没有设置,设置模板在python安装目录中找到如下图的路径,打开settings.py-tpl,相同位置添加上上os.path.join(BASE_DIR,'templates')。下次创建项目就可不再手动添加。

    1.6、settings.py中增加静态文件目录STATICFILES_DIRS【(js,css,image)存放目录】,这是放在templates中html文件能够使用js,css资源的关键

    在项目根目录即与manage.py文件同级下创建静态文件夹static,如果有多个就创建多个,但网页中不论是放在那个文件中,开始都以/static/开头

    1.7、templates文件夹下创建/或存放HTML文件,将html的js,css,imgs等文件放入images

      2、编辑urls.py文件,增加映射关系。

     业务函数的实现,业务函数与url的映射可都在此文件中书写,以后规范化,可将业务函数移入到应用的views.py中,此文件仅编辑业务函数与url的映射关系,再导入views.py中所有的业务函数

    from app名 import views

    下图为:直接将视图函数写在全局urls.py文件中

    八、访问web

      1、局域网中的浏览器输入HTTP://IP:PORT/login 就可访问验证。

    九、如何完全的删除一个应用app? 

    1.删除models.py 

      无论是删除一个单独的model还是删除整个App,都需要首先删除models.py文件中的模型。

    确认没有其他文件引用models.py中的类。

    迁移或者删除你的数据库,Django提供了简便的方法方便用户删除某App下的所有数据(Django 1.7)。

    python  manage.py migrate your_app_name zero   

      删除models.py中的数据模型。

    2.删除App

      再次确认其他App中没有引用此App的文件

      删除整个App文件夹

      在settings.py的Installed Apps中移除该app

      在urls.py中移除该App相关内容。 

     十、Django快速开发配置小结:

    在app的models.py创建类(即数据库中的表)
    在views.py下创建业务视图函数[导入orm模块]
      from django.shortcuts import render
      from django.shortcuts import HttpResponse
      from django.shortcuts import redirect
      from classModel import models

    在django的templates目录下创建前端html文件
    在在django的static目录下存放js,css.images 文件
    在urls.py下建立映射关系
      from classModel import views

  • 相关阅读:
    Scala 学习 (八) 高级语法
    Scala 学习 (七) 并发编程模型Akka
    Scala 学习 (六) 面向对象
    Scala 学习(五) Set和HashSet
    Scala 学习(四) 集合之List
    Scala 学习(三) 集合之数组
    Scala 学习(二) 方法和函数
    datatable动态添加,及填充数据
    因为数据库正在使用,所以无法获得对数据库的独占访问权
    win2003超过最大连接数
  • 原文地址:https://www.cnblogs.com/sunxiuwen/p/9592657.html
Copyright © 2011-2022 走看看