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: