安装Django
- 版本说明:
Django版本 | Python 版本 |
---|---|
1.8.x | 2.7, 3.2, 3.3, 3.4, 3.5 |
1.9.x, 1.10.x | 2.7, 3.4, 3.5 |
1.11.x | 2.7, 3.4, 3.5, 3.6 |
2.0.x | 3.4, 3.5, 3.6 |
2.1.x | 3.5, 3.6, 3.7 |
- 示例: pip3 install Django==2.0.4
创建项目
- 在合适位置创建一个目录
- 打开终端进入新建的目录下
- 输入
django-admin startproject ProjectName
- 完成后查看当前项目目录
- 项目文件说明
- manage.py : 一个命令行工具,可以使我们用多种方式对Django项目交互
- ProjectName:
- _init_.py : 一个空文件,告诉python这个目录是一个包
- settings.py : 项目的配置文件
- urls.py : 项目的URL声明
- Wsgi.py : 项目与WSGI兼容的Web服务器入口
- 项目文件说明
基本操作
-
设计表结构
-
创建数据库:
#进入数据库 mysql -u root -p #创建项目数据库 create database itmeng;
-
-
配置数据库
-
注意: Django默认使用的是SQLite数据库
-
配置MySQL
-
python3.x安装的是PyMySQL
-
在项目文件夹下_init_.py文件中写入两行代码:
import pymysql pymysql.install_as_MySQLdb()
-
-
在Settings.py文件中, 通过DATABASES选项进行数据库配置:
格式: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.数据库类型', 'NAME': "数据库名", 'USER': '用户名(数据库的), 'PASSWORD': '数据库密码', 'HOST': '服务器地址', 'PORT': '端口', } }
示例:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': "itmeng", 'USER': 'root', 'PASSWORD': 'mengfei', 'HOST': 'localhost', 'PORT': '3306', } }
-
-
创建应用
-
激活应用
-
在settings.py文件中, 将myApp应用加入到
INSTALLED_APPS
选项中(在列表中加入应用名即可)INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'myApp' ]
-
-
定义模型:
-
概述 : 有一个数据表, 就对应有一个模型
-
在models.py 文件中定义模型
-
引入
from django.db import models
-
模型类要继承models.Model类 (模型实际上就是一个类)
-
创建模型类
from django.db import models # Create your models here. # 创建模型(对应数据库中的 -- 班级表) # 类属性对应表里的字段 # models.XXX(设置数据类型) class Grades(models.Model): gname = models.CharField(max_length=20) gdate = models.DateTimeField() ggirlnum = models.IntegerField() gboynum = models.IntegerField() isDelete = models.BooleanField(default=False) # 学生表 class Students(models.Model): sname = models.CharField(max_length=20) sgender = models.BooleanField(default=True) sage = models.IntegerField() scontend = models.CharField(max_length=20) isDelete = models.BooleanField(default=False) # 关联外键 sgrade = models.ForeignKey("Grades")
说明: 不需要定义主键, 在生成时自动添加主键, 并且值为自增
-
-
-
在数据库中生成数据表:
-
生成迁移文件
- 在
project
目录下执行python3 manage.py makemigrations
生成迁移文件 - 会在
migrations
目录下生成一个迁移文件, 此时数据库中还没有生成数据表
- 在
-
执行迁移
-
执行
python3 manage.py migrate
生成数据表, 终端会反馈ok
代表成功相当于执行了SQL语句, 自动创建数据表
-
-
-
测试数据操作
-
进入
python shell
: 执行python3 manag shell
-
引入包 :
from myApp.models import Grades,Students from django.utils import timezone from datetime import *
-
查询所有数据
Grades.objects.all()
==类名.objects.all
-
添加数据: (本质就是创建一个模型类的实例对象)
from myApp.models import Grades,Students from django.utils import timezone from datetime import * grade = Grades() grade.gname = "py1806" grade.gdate = datetime(year=2018, month=9, day=10) grade.ggirlnum = 4 grade.gboynum = 46
-
-
查看某个对象, 比如: 查看
python05
# 类名.objects.get(条件) Grades.objects.get(pk=2)
-
修改数据
# 模型对象.属性 = 新值 相当于修改实例对象属性,修改完需要使用'save()'方法提交 grade2.gboynum = 45 grade2.save()
-
删除数据
# 物理删除方法,模型对象.delete() , 相当于直接删除模型的实例对象(慎用)
grade2.delete()
# 逻辑删除直接改变实例对象的isDelete属性
grade2.isDelete = True
- 关联模型对象
# 学生1
stu1.sname = "meng"
stu1.sage = 18
stu1.sconted = "Hello World"
stu1.sgrade = grade1 # 直接把外键属性等于需要关联的对象
stu1.save()
# 学生2
stu2.sname = "fei"
stu2.sage = 19
stu2.sgenter = True
stu2.sconted = "Hello Java"
stu2.sgrade = grade1 # 直接把外键属性等于需要关联的对象
stu2.save()
获得关联对象的集合:
需求: 获取python1806班级的所有学生
grade1.students_set.all()
动态创建一个学生:
需求: 使用python1806对象创建一个学生(直接添加到数据库中)
stu3 = grade1.students_set(sname='yan', sage=20, sconted='Hello C')
- 启动服务器
# 格式: python3 manage.py runserver ip:port
# ip 可以不写, 默认127.0.0.1
# 端口号也可以不写, 默认8000
# 说明: 这是一个纯python写的轻量级web服务器, 仅仅在开发测试中使用
# 如下:
python3 manage.py runserver 127.0.0.1:8000
# 打开游览器测试: http://127.0.0.1:8000
- Admin 站点管理
- 内容发布: 负责 增, 删, 改
- 公告访问
- 配置Admin应用: 在
settings.py
中INSTALLED_APPS
中添加’django.contrib.admin’ - 创建管理员用户: 执行
python3 manage.py createsuperuser
, 输入账号/邮箱/密码 - 站点汉化: 修改
settings.py
文件,LANGUAGE_CODE = 'zh-Hans'
&TIME_ZONE = 'Asia/Shanghai'
- 管理数据表
- 修改
my-app
下admin.py
# 引入模型 from .models import Grades, Students # 注册 admin.site.register(Grades) admin.site.register(Students)
- 自定义管理页面
示例:
效果图:class GradesAdmin(admin.ModelAdmin): # 列表页属性 list_display = ['pk','gname','gdate','ggirlnum','gboynum','isDelete'] list_filter = ['gname'] search_fields = ['gname'] list_per_page = 5 # 分页, 每5条一页 # 添加修改页属性 # fields = ['ggirlnum','gboynum','gname','gdate','isDelete'] fieldsets = [ ('num',{'fields':['ggirlnum','gboynum']}), ('base',{'fields':['gname','gdate','isDelete']}) ] # 注册 admin.site.register(Grades,GradesAdmin) admin.site.register(Students)
- 修改
- 关联对象
需求: 在添加班级的时候, 可以直接添加两个学生
class StudentsInfo(admin.TabularInline): # StackedInline和TabularInline 用法一样,效果不同 model = Students extra = 2 class GradesAdmin(admin.ModelAdmin): inlines = [StudentsInfo]
- 布尔值显示问题
class StudentsAdmin(admin.ModelAdmin): def gender(self): if self.sgender: return 'boy' else: return 'girl' # 设置页面列的名称 gender.short_description = 'Sex' # 直接传进gender函数 list_display = [ 'pk','sname', 'sage',gender,'sconted','sgrade','isDelete'] list_per_page = 10
- 执行动作位置
# 执行动作问题 actions_on_top = False actions_on_bottom = True
- 使用装饰器完成注册
# 使用装饰器注册 @admin.register(Grades) class GradesAdmin(admin.ModelAdmin): inlines = [StudentsInfo] # 列表页属性 list_display = ['pk', 'gname', 'gdate', 'ggirlnum', 'gboynum', 'isDelete'] list_filter = ['gname'] search_fields = ['gname'] list_per_page = 5 # 分页, 每5条一页 # 添加修改页属性 # fields = ['ggirlnum','gboynum','gname','gdate','isDelete'] fieldsets = [ ('num', {'fields': ['ggirlnum', 'gboynum']}), ('base', {'fields': ['gname', 'gdate', 'isDelete']})
视图的基本使用
- 概述:
- 在django中, 视图对web请求进行回应
- 视图就是一个python函数, 在views.py文件中定义