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:

 
原文地址:https://www.cnblogs.com/dmjsd/p/13512388.html