zoukankan      html  css  js  c++  java
  • Django笔记

    1.安装Django:pip install  Django==2.1  (现在最新版本是3.1,但是相应的数据库也需要更新)

    2.Django和flask的区别:

       flask:是轻量级的,我们mock接口的时候会用到

       Django:是重量级的,

    3.用命令创建Django项目

       1.创建项目的命令:django-admin startproject 项目名称

        2.启动Django命令:首先要进入到项目中:cd 项目名称

                                          然后执行 python manage.py runserver

        3.python manage.py runserver   起的是本机的可以访问,默认端口号是8000

       4.python manag.py runserver 0.0.0.0:8000   任何人都可以访问

       5. python manger.py runserver 127.0.0.1:8002  本机可以访问,指定端口号是8002

       6.创建子模块的命令: python manage.py startapp 子模块名称

    4.用pycharm创建Django项目

    创建完成,运行Django,只需要点击运行小图标

     5.Django使用的开发模式

        首先了解MVC模式:

                   model:数据库

                   view:前端展示

                  controller:逻辑控制
         Django使用的模式是:
              model:数据库
              view:逻辑控制
              template:前端展示

    6.Django的结构:

       

     1. setting:配置目录,添加子模块需要配置,配置html的路径,js、css配置

    LANGUAGE_CODE = 'en-us'#修改页面展示的语言是中文,还是英文;en-us是英文,zh-Hans是中文
    
    TIME_ZONE = 'Asia/Shanghai'#这个字段代表着时区,与数据库中增加数据中的创建时间有关,Asia/Shanghai代表着东八区的时间
    
    USE_I18N = True
    
    USE_L10N = True
    
    USE_TZ = False#这个也是和时区有关,为False是东八区的时间,为True就是标准时区

       创建子模块,需要在setting中配置:

    INSTALLED_APPS = [#这里导入添加的app
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'user'#把子模块的名字放进来
    ]

       配置template的路径

    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [os.path.join(BASE_DIR,'templates')],#寻找到放HTML的地址
            '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',
                ],
            },
        },

       配置js、css

    STATIC_URL = '/static/'
    
    STATICFILES_DIRS = (
        os.path.join(BASE_DIR,'static'),
    )

    2.views里写逻辑:

    from django.shortcuts import render,HttpResponse
    from . import models
    
    # Create your views here.
    def user_info(request):#这里的request有用的
        s='你好'
        return HttpResponse(s)

    3.urls.py:放views里涉及到url的集合地

    from django.contrib import admin
    from django.urls import path
    from user import views  #导入写的函数名称
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('index/', views.user_info),#第一个里随便写一个名字,后面写函数名称,不能有括号
        # path('welcome/', views.welcome),#第一个里随便写一个名字,后面写函数名称,不能有括号
        # path('', views.index),#这里随便写一个名字,后面写函数名称
    ]

    4.wsgi.py:部署项目的时候会用到该文件

    5.models.py:释放数据结构的

    from django.db import models
    
    # Create your models here.
    
    class Category(models.Model):
        name = models.CharField(verbose_name='分类名称',max_length=20,unique=True)#verbose表示字段名,max_length字段最多能有多长,unique为True的时候名字该字段不能重复
        create_time = models.DateTimeField(verbose_name='创建时间',auto_now_add=True)#auto_now_add表示创建的时间,不会改变
        update_time = models.DateTimeField(verbose_name='修改时间',auto_now=True)#auto_now可以一直改变
        class Meta:
            db_table='category'#表的名称
            verbose_name='分类'
            verbose_name_plural=verbose_name
            ordering=['-create_time','name']#ordering表示排序,-create_time按创建时间降序排序,create_time按创建时间升序排序

    表建好后,需要执行命令,实现物理表

    python manage.py makemigratuons

    python manage.py makemigrate

    执行完成后需要检查才能知道表是否已经建成功

    找到db.sqlite.3复制路径,打开Navicat Premium工具,点击连接SQLIte,把复制的地址放进去,查看新建的表

    6.templates目录下面放html

    7.static目录下面放js、css

    8.操作数据库

    前提:

    import os,django
    
    # Create your tests here.
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'sky.settings')
    django.setup()#这个必须要的
    
    from user import models

    增加有两种方法

    #第一种增加的方法
    category=models.Category(name='Python')
    category.save()
    #第二种增加的方法
    models.Category.objects.create(name='Linux')

    查看也有两种方法,查找返回的结果都是obj类型的

    c=models.Category.objects.get(name='Python')#get方法只能找只有一条记录的数据,否则就会报错,查找不存在的数据也会报错
    print(c.id)
    print(c.name)
    c=models.Category.objects.filter(name='Python')#filter方法查找的数据返回的是一个数组,不管遇到什么情况,都不会报错,
    print(c[0].id)
    print(c[0].name)
    c=models.Category.objects.get(name='Python',id=1)#,表示and多个条件查询
    print(c.id)
    print(c.name)

    修改也有两种方法

    #第一种方法
    c=models.Category.objects.get(name='python1')
    c.name='python'
    c.save()
    #第二种方法(可以批量修改)
    c=models.Category.objects.filter(name='python')
    c.update(name='Java')

    删除也有两种方法

    #第一种方法
    c1=models.Category.objects.get(id=1)
     c1.delete()
    #第二种方法,可以删除多条
    c1=models.Category.objects.filter(id=2)
    c1.delete()

    两张表存在一对多的关系(比如A表多对一B表),在外键上设置on-delete,有几种不同的情况

    models.do-nothing:删除A表中的数据,对B表没有影响

    models.protect:删除A表中的数据,A表还有和B关联的数据,这时不让删除

    models.cascad:删除A表中的数据,B表和A表中的有关联的数据也会被删除

    models.set_default:前提B表结构中设置默认值,删除A表中的数据,B表中与A有关联的数据取默认值

    models.set_NULL:前提是这边可以为NULL,删除A表中的数据,B表中与A有关联的数据取NULL

    models.set:

     
  • 相关阅读:
    Android系统Recovery工作原理2update.zip差分包问题的解决
    学习 原理图1 认识 元器件
    ARM新GPU架构Midgard
    ARM新GPU架构Midgard
    10种图片防盗链的方法
    一个基于PDO的数据库操作类(新) + 一个PDO事务实例
    localhost与127.0.0.1的区别
    header ContentType类型
    PHP采集利器:Snoopy 试用心得
    一个简单易用的导出Excel类
  • 原文地址:https://www.cnblogs.com/dmjsd/p/13512388.html
Copyright © 2011-2022 走看看