zoukankan      html  css  js  c++  java
  • Django的学习(一)--- M与V

    1. 学习目标

      (1)目录结构规范

      (2)urls路由方式

      (3)settings配置

      (4)ORM操作

    2. Django初识

      Django是MVT模式,其实还是mvc模式:

        M和以前一样是model

        V是View与mvc中的C的功能一样

        T是Templates,是模板的意思,与mvc中的V的功能一样 

      Django不足,没有service层,也可以人为去添加,但是初始状态就没有。

    3. 工程目录结构

      

      通过命令:

    # 创建工程
    django-admin startproject 工程名
    
    # 在工程中(manage.py同级目录中)创建应用名(app)
    python manage.py start 应用名
    

      如上图所示:

      SafeHat为我的工程,下面有5个文件

      (1) Safe_person 为创建的应用:

        

        migrations为迁移文件,比如:写好model后可生成表时,操作数据库文件就是放在其中

        __init__.py 表示当前目录为包,可在其中配置相关的参数

        admin.py 是Django自带的admin相关配置,可与model相关

        apps.py   是应用中的相关的配置参数,可自定义

        models.py  是ORM,写指定的类,通过命令可以创建数据库结构

        tests.py      单元测试

        views.py     业务代码

      (2)SafeHat  为工程文件目录:

        

        __init__.py:  表示当前目录为包,可在其中配置相关的参数

        settings.py   设置项目目录,数据库连接使用app参数

        urls.py          配置页面路由

        wsgi.py   处理响应

      (3) templates 为T的模文件夹,可在文件夹里面建立相对的模板库文件夹

      (4) db.sqlites3 自带的额sqlite数据库

      (5)manage.py 项目入口函数,启动,创建app

    4. urls路由方式

      

    path('url路径',view.方法)
    

     

    5. settings配置

      (1)  应用注册:INSTALLED_APPS 加入     '文件名'

        

     (2)配置数据库,如果数据库连接有问题,配置又正确,处理方案:pip install mysqlclient

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': '数据库名',
            'USER': '用户名',
            'PASSWORD': '密码',
            'HOST': 'ip',
            'PORT': '端口',
        }
    }
    

     (3)配置模板

    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [os.path.join(BASE_DIR, 'templates')],
            'APP_DIRS': True,
            'OPTIONS': {
                'context_processors': [
                    'django.template.context_processors.debug',
                    'django.template.context_processors.request',
                    'django.contrib.auth.context_processors.auth',
                    'django.contrib.messages.context_processors.messages',
                ],
            },
        },
    ]
    

      (4) 配置语言

    LANGUAGE_CODE = 'zh-hans'
    
    TIME_ZONE = 'Asia/shanghai'
    
    USE_I18N = True
    
    USE_L10N = True
    
    USE_TZ = True
    

      

    6. ORM操作

      (1) 生成对应的类:

    class BookInfo(models.Model):
        btitle = models.CharField(max_length=20, db_column='title')
        bpub_data = models.DateField()
        bread = models.IntegerField(default=0)
        bcomment = models.BooleanField(default=0)
        isDelete = models.BooleanField(default=False)

        AutoField
        自动增长的IntegerField,通常不用指定 不指定时Django会自动创建属性名为id的自动增长属性。

        BooleanField
        布尔字段,值为True或False。


        NullBooleanField
        支持Null、True、False三种值。


        CharField
        字符串 CharField (max_length=字符长度) max_length表示最大字符个数


        TextField
        大文本字段,一般超过4000个字符时使用。


        IntegerField
        整数


        DecimalField
        十进制浮点数 DecimalField (max_digits=None, decimal_places=None) max_digits表示总位数,decimal_places表示小数位数


        FloatField
        浮点数


        DateField
        日期 DateField [auto_now=False, auto_now_add=False]) auto_now每次保存对象时,自动设置该字段为当前时间 auto_now_add当对象第一次被创建时自动设置当前时间 auto_now_add和auto_now互斥,组合将会发生错误。


        TimeField
        时间,参数同DateField


        DateTimeField
        日期时间,参数同DateField


        FileField
        上传文件字段


        ImageField
        继承于FileField,对上传的内容进行校验,确保是有效的图片

      (2)查询

        

    # get 返回一个对象
    BookInfo.objects.get(条件)
    
    # all返回queryset集合
    BookInfo.objects.all()
    
    # 实现where :三种方案
    # filter、exclude、get
    # 表中的属性名__比较运算符
    BookInfo.objects.filter(id__exact='值')
    
    #实现like 
    # contains  相当于  %值%
    # startwih  相当于   值%
    # endwith  相当于    %值
    # 如果有%无需转义
    BookInfo.objects.filter(btitle__contains = '值')
    
    # 查空
    # 不为空结果
    表类.objects.filter(属性__isnull = False)
    # 为空结果
    表类.objects.filter(属性__isnull = True)
    
    # 范围查询
    表类.objects.filter(属性__in = [值1, 值2......])
    
    # 比较查询
    # __gt大于
    # __gte大于等于
    # __It小于
    # __Ite小于等于
    
    # 查询日期
    # 使用data()函数
    # 使用      日期属性__year 或者  __month等
    

      

  • 相关阅读:
    codeforces C. No to Palindromes!
    codeforces D. Pashmak and Parmida's problem
    codeforces C. Little Pony and Expected Maximum
    codeforces D. Count Good Substrings
    codeforces C. Jzzhu and Chocolate
    codeforces C. DZY Loves Sequences
    codeforces D. Multiplication Table
    codeforces C. Painting Fence
    hdu 5067 Harry And Dig Machine
    POJ 1159 Palindrome
  • 原文地址:https://www.cnblogs.com/coylee/p/10783230.html
Copyright © 2011-2022 走看看