zoukankan      html  css  js  c++  java
  • Django学习--models(模型)

    在当代Web应用中,主观逻辑经常牵涉到与数据库的交互。数据库驱动网站在后台链接数据库服务器,从中取出数据,然后在Web页面用漂亮的格式展示数据

    01 数据库查询的笨方法

    1.在视图中使用原始sql语句进行从数据库中获取数据

    2.比如我想获取数据库test中表login中username字段

    表的结构如下:

     3.建立数据库的连接与查询

    在视图函数中新建name函数进行数据库的连接 views.py

    from django.shortcuts import render,HttpResponse,Http404
    
    def name(request):
        import MySQLdb
        db = MySQLdb.Connect(user='root',db='test',passwd='1234567890',host='localhost')
        cursor = db.cursor()
        cursor.execute('select username from login')
        names = cursor.fetchall()
        #names = [row[0] for row in cursor.fetchall()]
        db.close()
        return render(request,'names.html',{'names':names})

    在names.html中书写代码输出username字段到web page

    4.我们将数据库连接参数硬行编码与代码之中,理想情况下,这些参数应当保存在Django配置中。但是在实际情况中,我们运行每个视图函数都必须重复同样的代码:创建数据库连接,创建数据库游标,执行某个语句,然后关闭数据库等等操作。这就把我们拴死在MySQL之上。如果果断时间我们要从mysql换到PostgreSQL,就不得不使用不同的数据路适配器(psycopg而不是MySQLdb).。而Django数据层正是致力于解决这些问题

    02 MTV开发模式

    1.MVC模式的简介

    Django的设计鼓励松耦合及对应用程序中不同部分的严格分割,把数据存取逻辑,业务逻辑和表现逻辑组合在一起的概念有时被称为软件架构的 Model-View-Controller(MVC)模式。在这个模式中,Model代表数据存取层,View代表的是系统中选择显示什么和怎样显示的部分,Controller指的是系统中根据用户输入并视需要访问模型以决定使用哪个视图的那部分。

    2.Django中MVC框架及MTC框架

    • M --- 数据存取部分,由django数据库处理
    • V --- 选择显示那些数据要显示以及怎样显示的部分,由视图和模板处理
    • C --- 根据用户输入委派视图的部分,有django框架根据URLconf设置,对给定URL调用适当python函数

    由于C由框架自行处理,而django里更关注的是模型(Model),模板(Template)和视图(Views),Django也被称为MTC框架,在MTV开发模式中:

    • M代表模型(Model),即数据存取层。该层处理与数据相关的所有事务:如何存取,如何验证有效性等
    • T代表视图(View),即业务逻辑层。该层包含存取模型及调取恰当模板的相关逻辑,你可以把它看做模型与模板之间的桥梁
    • T代表模板(Template),即表现层,该层处理与表现相关的决定:如何在页面或其他类型文档中进行显示

    03 数据库配置

    1.如何配置

    在开始Django数据库层的探索之前,我们需要做些初始配置,我们需要告诉Django使用什么数据库以及如何连接数据库。相关配置在settings.py文件中。由于django自带数据库sqlite3,因此你可以就使用它,当然你也可以改成你喜欢的数据库,比如我喜欢mysql,即将下面的代码粘贴即可

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'tests',
            'USER': 'root',
            'PASSWORD': '1234567890',
            'HOST': 'localhost',
            'PORT': '3306',
        }
    }

    2.注册你的应用app名

    当你配置完,在应用文件下models.py书写代码之前,必须注册你的应用的名字即func1。这样你的数据模型才能创建使用,

    在文件settings.py app注册模块下:

    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'func1.apps.Func1Config',
    ]

    添加最后一行代码即完成注册app:func1

    特别说明:

    当你注册app后,其数据模型的代码的表名与与app名字相关,这个稍微提一下

    04 第一个模型

    1.概念

    在models.py书写的类名即是表,其中声明的属性为表中字段

    2.创建表和字段,models.py代码如下

    from django.db import models
    
    class Publisher(models.Model):
        name = models.CharField(max_length=30)
        address = models.CharField(max_length=50)
        city = models.CharField(max_length=60)
        state_province = models.CharField(max_length=30)
        country = models.CharField(max_length=50)
        website = models.URLField()
        
    class Author(models.Model):
        first_name = models.CharField(max_length=30)
        last_name = models.CharField(max_length=40)
        email = models.EmailField()
        
    class Book(models.Model):
        title = models.CharField(max_length=100)
        authors = models.ManyToManyField(Author)
        publisher = models.ForeignKey(Publisher)
        publication_date = models.DateField()

    3.说明

    3.1每个数据模型都是django.db.models.Model的子类。它的父类Model包含了所有必要的和数据库及交互的方法,并提供了一个简洁的定义数据库字段的语法

    3.2每个模型相当于单个数据库表,每个属性也是这个表中的一个字段,属性名就是字段名,它的类型(例如CharField)相当于数据库的字段类型(例如 varchar)。Publisher模块等同于平时sql语句

    04 模型安装

    1.在基本准备工作完成之后,进行模型的建立,实际就是表的建立

    2.模型验证

    3.数据模型建立

    python manage.py makemigrations

    python manage.py migrate

    4.查看表的生成

    5.分析

    建立里四张表:func1_author,func1_book,func1_book_authors,func1_publisher,其他表 django_session存放session,django_admin_log 数据库操作日志等

    05 基本数据的访问

    1.一旦创建了模型,Django自动为这些模型提供了高级的python APT。运行python manage.py shell

    表中内容:

    2.其他在python API中展示的数据库的增删改查就不一一操作了,其具体代码将在后面程序中展示

  • 相关阅读:
    ADF中遍历VO中的行数据(Iterator)
    程序中实现两个DataTable的Left Join效果(修改了,网上第二个DataTable为空,所处的异常)
    ArcGIS api for javascript——鼠标悬停时显示信息窗口
    ArcGIS api for javascript——查询,然后单击显示信息窗口
    ArcGIS api for javascript——查询,立刻打开信息窗口
    ArcGIS api for javascript——显示多个查询结果
    ArcGIS api for javascript——用图表显示查询结果
    ArcGIS api for javascript——查询没有地图的数据
    ArcGIS api for javascript——用第二个服务的范围设置地图范围
    ArcGIS api for javascript——显示地图属性
  • 原文地址:https://www.cnblogs.com/LQ6H/p/10134005.html
Copyright © 2011-2022 走看看