zoukankan      html  css  js  c++  java
  • Django 框架篇(二) : 创建APP之视图函数; model(模型)系统操作数据库之ORM操作;

    创建APP

    之所以要来创建APP是因为在一个项目是有许多小的项目组合而成的. 如果这些项目全部放在一起, 会特别的混乱,不利于管理, 也不利于项目后期的维护. 所以, 我将每一个功能都解耦成一个一个不同名称且和当前功能相关的 一个一个的文件夹.

    一. 命令行创建APP文件:

    python manage.py startapp app01

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

    复制代码
    app01/
        migrations
            __init__.py
        __init__.py
        admin.py
        apps.py
        models.py
        tests.py
        views.py
    复制代码

    二. pycharm创建APP:

    1. Django项目创建后后追加app:

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

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

    startapp app01

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

     

    2. 在初创建django项目时,建立app:

    在当前对话框中的Application name: 中加上要创建的项目的名字即可:

    视图函数

    一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应。

    响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片。

    无论视图本身包含什么逻辑,都要返回响应。代码写在哪里也无所谓,只要它在你当前项目目录下面。除此之外没有更多的要求了——可以说“没有什么神奇的地方”。为了将代码放在某处,大家约定成俗将视图放置在项目(project)或应用程序(app)目录中的名为views.py的文件中。

     

    ORM介绍:

    ORM概念:

    面向对象与关系数据库存在的互不匹配的现象的技术。

    简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。

    ORM在业务逻辑层和数据库层之间充当了桥梁的作用。

     

    ORM由来:

    让我们从O/R开始。字母O起源于"对象"(Object),而R则来自于"关系"(Relational)。

    几乎所有的软件开发过程中都会涉及到对象和关系数据库。在用户层面和业务逻辑层面,我们是面向对象的。当对象的信息发生变化的时候,我们就需要把对象的信息保存在关系数据库中。

    按照之前的方式来进行开发就会出现程序员会在自己的业务逻辑代码中夹杂很多SQL语句用来增加、读取、修改、删除相关数据,而这些代码通常都是极其相似或者重复的。

     

    ORM的优势:

    ORM解决的主要问题是对象和关系的映射。它通常将一个类和一张表一一对应,类的每个实例对应表中的一条记录,类的每个属性对应表中的每个字段。 

    ORM提供了对数据库的映射,不用直接编写SQL代码,只需操作对象就能对数据库操作数据。

    让软件开发人员专注于业务逻辑的处理,提高了开发效率。

     

    ORM的劣势:

    ORM的缺点是会在一定程度上牺牲程序的执行效率。

    ORM的操作是有限的,也就是ORM定义好的操作是可以完成的,一些复杂的查询操作是完成不了。

    ORM用多了SQL语句就不会写了,关系数据库相关技能退化...

     

    ORM总结:

    ORM只是一种工具,工具确实能解决一些重复,简单的劳动。这是不可否认的。

    但我们不能指望某个工具能一劳永逸地解决所有问题,一些特殊问题还是需要特殊处理的。

    但是在整个软件开发过程中需要特殊处理的情况应该都是很少的,否则所谓的工具也就失去了它存在的意义。

     Django 中的ORM

     Django 中默认的数据库是用的db.sqlite3 (ACID的关系型数据库管理系统,它包含在一个相对小的C库中);

    更改这个默认的数据库为指定的MySQL数据就需要重新配置主文件夹中的settings.py 配置文件:

    配置MySQL数据库:

    1. 在Django项目中的settings文件夹中按照下面的内容更改数据库连接信息:

    复制代码
            DATABASES = {
                'default': {
                    'ENGINE': 'django.db.backends.mysql',   # 引擎
                    'NAME': 'day66',                        # 创建的数据库的名字
                    'USER':'root',                          # 用户名
                    'PASSWORD':'',                          # 密码
                    'HOST':'127.0.0.1',                     # IP
                    'PORT': 3306,                           # 端口号
                }
            }
    复制代码

      

    2.  在与Django项目同名的目录下的__init__.py文件中写如下代码,告诉Django使用pymysql模块连接MySQL数据库:

    import pymysql
     
    pymysql.install_as_MySQLdb()

    Model的用法:

    1. 介绍说明:

    在Django中model是你数据的单一、明确的信息来源。它包含了你存储的数据的重要字段和行为。通常,一个模型(model)映射到一个数据库表。

    基本情况:

      • 每个模型都是一个Python类,它是django.db.models.Model的子类。
      • 模型的每个属性都代表一个数据库字段。
      • 综上所述,Django为您提供了一个自动生成的数据库访问API,详询官方文档链接

    2. 创建表:

    复制代码
    # 1, 在APP文件夹中找到 models.py文件夹;  
    # 2, 导入该模块
    from django.db import models 
    
    class Userinfo(models.Model):  # 3, 继承该类, 
        user = models.CharField(max_length=32)  # varchar(32) # 4, 添加字段
        pwd = models.CharField(max_length=32)                        # 4, 添加字段
    
        def __str__(self):
            return self.user

    # 5, 数据库迁移 执行两条命令:

     python manage.py makemigrations # 把models.py的变化记录下来
     python manage.py migrate # 去修改你的数据库

    复制代码

    3.  获取表中的数据, 以及插入数据,:

    复制代码
    # 使用数据库中的数据往往是在视图函数中的需求, 所以需要在 APP文件中的 view.py中使用
    
    from app01 import models # 从自己的app01的包中导入 models 模块. 该模块创建了字段

    # 查: models.Userinfo.objects.all() # 此方法是获取所有的数据 models.Userinfo.objects.get(user='Fush') # 此方法获取一条字段user='Fush'的数据, 若没有符合条件的数据则报错, 如果有多条则也报错

    models.Userinfo.objects.filter(user='Fush') # 此方法筛选出所有字段user='Fush'的数据, 若没有符合条件的数据则为None, 如果有多条则组成列表返回对象.

    # 增 models.Userinfo.objects.create(user='MJJ',pwd='XJJ') # 此方法是插入数据
    复制代码

     

     4. 删除数据 以及更改数据:

    复制代码
    # 删除数据和更改数据都需要确认该数据是否存在,
    # 所以 需要在执行删除, 和更改这两步操作之前都需要进行查找,
    #  filter()  所返回的对象 可以直接进行删除和更改
    
    edit_list = models.Publisher.objects.filter(id='id')  # 筛选出所有等于id的数据
    
    edit_obj = edit_list[0] # 根据索引取出列表中的数据对象;
    
    # 删除该条数据:
    edit_obj.delete()
    
    # 更改数据:
    edit_obj.name = 'Fusheng' # 将数据中的name字段改成 'Fusheng'
    edit_obj.save()    # 将更改后的数据 保存到数据库
    复制代码
  • 相关阅读:
    UVa 658 (Dijkstra) It's not a Bug, it's a Feature!
    CodeForces Round #288 Div.2
    UVa 540 (团体队列) Team Queue
    UVa 442 (栈) Matrix Chain Multiplication
    CodeForces Round #287 Div.2
    CodeForces Round #286 Div.2
    CodeForces Round #285 Div.2
    UVa 12096 (STL) The SetStack Computer
    UVa 101 (模拟) The Blocks Problem
    UVa 12171 (离散化 floodfill) Sculpture
  • 原文地址:https://www.cnblogs.com/123zzy/p/9772917.html
Copyright © 2011-2022 走看看