Django1.11.4框架简介(一)
参考以下内容学习
作者: 哥哥没有错,微信号 墨迹测试开发 Yong
- https://blog.csdn.net/Jones__Wu/article/details/105307097
- https://www.cnblogs.com/fengbo1113/p/8547302.html
- https://blog.csdn.net/garrulousabyss/article/details/82230391?spm=1001.2101.3001.6650.5&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7Edefault-5.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7Edefault-5.no_search_link
文章目录
- Django1.11.4之基本流程走通
- 设计模式
- MVC
- 核心思想
- 解耦
- 浏览器请求发送给Controller,Controller把需求发给Model,Model返回数据给Controller,Controller把数据传送给View渲染,View返回给浏览器
- 编程模式
- Model(模型)
- 应用程序中处理数据逻辑的部分
- 通常模型对象负责在数据库中存取数据
- View(视图)
- 处理数据显示的部分
- 通常视图是依据模型数据创建的
- Controller(控制器)
- 处理用户交互的部分
- 负责从视图读取数据,通知用户输入,并向模型发送数据
- 优点
- 降低了各功能模块之间的耦合性,方便重构代码,最大程度上实现了代码重用
- MTV
- 概述
- 本质与MVC没有区别,各组件之间为了保持松耦合关系
- 编程模式
- Model(模型)
- 负责业务对象与数据库的对象(ORM)
- Template(模板)相当于MVC里的View
- 负责把页面展示给用户
- View(视图)相当于MVC里的Controller
- 负责业务逻辑,并在适当时候调用Model和Template
- 注意
- Django还有一个url分发器,作用是将一个个URL分发给不同的View处理
- 图解
- 双击放大
- 说明:1.用户输入URL,通过URL控制器进行正则匹配,匹配到相应的视图函数,交给视图处理;2.视图交给Model去取数据,Model取完数据返回给视图;3.视图再把需要展示的数据传给模板(就是html页面)
- 安装 Django1.11.4版本
- Django与Python对应版本自行百度
- 安装步骤
- 进入终端
- 输入 pip install Django==1.11.4
- 验证是否安装成功
- 进入Python环境
- import django
- django.get_version()
- 创建项目
- 创建目录
- 打开终端进入刚才创建的目录下
- 输入 django-admin startproject djangodemo(最后一个是项目名称)
- 输入 tree . /F 查看目录层级
- 目录层级
- manage.py
- 一个命令行工具,用于我们和Django的交互
- project目录
- __init__.py
- 空文件,告诉Python这个目录应该被看做一个Python包
- settings.py
- 项目配置文件
- urls.py
- URL分发器,项目的URL声明
- wsgi.py
- 项目与WSGI兼容的web服务器入口
- 基本操作
- 设计表结构
- 数据库的知识,随意设计就行了
- 班级表
- 学生表
- 配置数据库
- Django默认数据库是SQLite
- settings.py中,通过DATABASES配置数据库
- 配置MySQL
- 用pymysql库
- 在__init__.py中写入两行代码
- import pymysql
- settings.py中
- DATABASES = {
- 创建应用
- 一个项目可以创建多个应用,每个应用负责一种业务
- 打开终端,进入项目目录,结构为:
- │ manage.py
- 执行python manage.py startapp myApp
- 创建一个名为myApp的应用
- myApp目录说明
- admin.py
- 站点配置
- models.py
- 模型
- views.py
- 视图
- 激活应用(将应用配置到项目中)
- settings.py文件中,将myApp加入到INSTALLED_APPS中
- # Application definition
- 定义模型(对接数据库)
- 一个数据库表对应一个模型
- 在models.py中定义
- from django.db import models
- 模型类要继承models.Model类
- class Grades(models.Model):
- 两个类对应库中的两个表,字段名与老师的略有不同
- 说明:不需要定义主键,主键在生成表时自动添加,并默认值自动添加
- 生成数据表
- 生成迁移文件
- 终端中执行: python manage.py makemigrations
- myApp的目录migrations下生成一个迁移文件
- 执行迁移
- 终端中执行: python manage.py migrate
- 数据库中会生成一系列表
- 如果重新迁移的话,需要删除0001.initial.py文件,把数据库也一块删除,然后再生成迁移文件,再迁移
- 新增一张表的话不需要重新迁移,直接生成0002的迁移文件,再执行迁移即可
- 修改原表的字段的话,需要重新迁移
- 测试操作数据
- 进入python shell
- 执行python manage.py shell
- 引入一些包
- from myApp.models import Grades, Students
- 查询班级表所有数据
- Grades.objects.all()
- 添加数据
- 本质:创建一个模型类的对象实例
- grade1 = Grades()
- 创建一个空实例
- grade1.name = 'python'
- 名字
- grade1.date = datetime(yaer=2020, month=4, day=23)
- 日期
- grade1.save()
- 将刚才创建的grade1实例传给数据库,创建一条数据
- 重写类的__str__函数使之更好地显示数据
- class Grades(models.Model):
- 查看某个数据
- Grades.objects.all()
- 查询所有
- 类名.objects.get(pk=2)
- 查询id为2的那一条数据
- 分支主题
- 修改数据
- 模型对象.属性 = 新值
- grade.name = 'c++'
- 模型对象.save()
- grade.save()
- 删除数据(物理删除)
- g = Grades.objects.get(pk=2)
- g.delete()
- 关联对象
- stu = Students()
- stu.name = 'zcz'
- ......
- 获得关联对象的集合
- 需求:获取某个班级的所有学生
- 类名.关联的类名小写_set.all()
- 需求:创建某个人,属于某个班级
- stu3 = grade1.setudents_set.create(name=u'曾志伟', gender=True, ......)
- 会直接添加到数据库,不用再进行save()
- 启动服务器
- 格式
- python manage.py runserver ip:port
- ip不写代表本机ip
- port不写默认是8000
- 说明
- Python写的轻量级web服务器,仅在开发测试时使用
- 启动
- 打开终端没进入项目目录
- python manage.py runserver
- 别忘了启动数据库
- 浏览器输入 127.0.0.1:8000检查
- 分支主题
- Admin站点管理
- 更好的管理数据库的数据,相当于一个后台管理系统
- 概述
- 内容发布
- 负责添加、修改、删除数据
- 公告访问
- 配置Admin应用
- 在settings.py中的INSTALLED_APPS中添加django.contrib.admin
- 默认已经添加
- 创建管理员用户
- python manage.py createsuperuser
- 输入账号密码
- 浏览器127.0.0.1:8000/admin进入
- 汉化
- settings.py文件
- LANGUAGE_CODE = 'zh-Hans'
- 管理数据表
- 修改admin.py文件
- 引入models中的类
- from .models import Grades, Students
- 添加注册
- admin.site.register(Grades)
- 自定义管理页面
- 定义类class GradesAdmin(admin.ModelAdmin):
- 列表页属性
- list_display = ['pk', 'name', 'date', 'girl_num', 'boy_num', 'isDelete']
- list_filter = ['name']
- search_fields = ['name']
- list_per_page = 5
- 添加、修改页属性
- fields = ['girl_num', 'boy_num', 'name', 'date', 'isDelete']
- fieldsets = [
- 注意:fields和fieldsets不能同时使用
- 关联对象
- 需求:在创建一个班级的时候可以同时添加几个学生
- 布尔值显示问题
- 写函数
- def sex(self):
- 设置页面列的名称
- 执行动作的位置问题
- actions_on_bottom = True
- 使用装饰器完成注册
- @admin.register(Students)
- 分支主题
- 视图的基本使用
- 概述
- 在django中,视图对web请求进行回应
- 视图就是一个Python函数, 在views.py文件中定义
- 定义视图
- from django.http import HttpResponse
- def index(request):
- return HttpResponse('zcz is a goood boy. ')
- 配置url
- 修改project目录下的urls.py文件
- from django.conf.urls import url, include
- 在myApp应用目录下创建一个urls.py文件
- from django.conf.urls import url
- 模板的基本使用
- 概述
- 模板就是HTML页面,可以根据视图传过来的数据对页面进行填充
- 创建模板
- 新建templates文件夹
- 在templates中新建myApp文件夹
- 配置模板路径
- 修改settings.py文件下的TEMPLATES
- 'DIRS': [os.path.join(BASE_DIR, 'templates')],
- 定义grades.html和students.html模板
- 模板语法
- {{ 输出值,可以使变量,可以使对象.属性 }}
- {% 执行代码 %}
- http://127.0.0.1:8000/grades
- 写grades.html模板
- {% for grade in grades %}
- 定义视图
- from .models import Grades, Students
- 配置URL
- url(r'^grades/$', views.grades),
- 说明:代码只有部分,全代码仍需要去看视频
- 流程总结
- 写模板,也就是HTML页面
- 页面要与数据库交互,因此要定义视图
- 视图负责去模型中取得相应的数据(因为模型负责和数据库对接,所以要拿数据库的数据必须经过模型)
- 视图在模型中取得了相应的数据,再返回给模板渲染
- 点击班级,显示对应班级的所有学生
- 定义视图
- def get_student_id(request, num):
- grade = Grades.objects.get(pk=num)
- student_list = grade.students_set.all()
- return render(request, 'myApp/students.html', {'students': student_list})
- 配置url
- url(r'^grades/(\d+)/$', views.get_student_id),
- 流程解析
- 点击grades.html页面的超链接,观察地址栏,可以看到会返回类似于localhost:8000/grades/1的地址,所以需要配置相应的url
- 而数据的处理需要交给views层,所以需要定义相对应的视图
- 需要注意,虽然地址栏是grades/1,但是显示的是students.html的内容,原因是视图返回了myApp/students.html以及相对应的学生列表
- 说明:代码仍旧不全,全代码还请去看视频
- 流程梳理
- 创建工程
- 执行 dijango-admin startproject project
- 创建项目
- 执行 python manage.py startapp myApp
- 激活项目
- 修改 settings.py中的INSTALLED_APPS
- 配置数据库
- 修改__init__.py,引入pymysql包
- 修改settings.py文件中的DATABASES
- 创建模型类
- 在项目目录下的models.py文件中
- 生成迁移文件
- 执行 python manage.py makemigrations
- 执行迁移
- 执行 python manage.py migrate
- 配置ADMIN站点
- 创建模板目录/项目模板目录
- 在settings.py文件的TEMPLATES中配置模板路径
- 在project下修改urls.py
- 在项目目录下创建urls.py
整体大纲
Django1.11.4之基本流程走通
设计模式
MVC
核心思想
解耦
浏览器请求发送给Controller,Controller把需求发给Model,Model返回数据给Controller,Controller把数据传送给View渲染,View返回给浏览器
编程模式
Model(模型)
应用程序中处理数据逻辑的部分
通常模型对象负责在数据库中存取数据
View(视图)
处理数据显示的部分
通常视图是依据模型数据创建的
Controller(控制器)
处理用户交互的部分
负责从视图读取数据,通知用户输入,并向模型发送数据
优点
降低了各功能模块之间的耦合性,方便重构代码,最大程度上实现了代码重用
MTV
概述
本质与MVC没有区别,各组件之间为了保持松耦合关系
编程模式
Model(模型)
负责业务对象与数据库的对象(ORM)
Template(模板)相当于MVC里的View
负责把页面展示给用户
View(视图)相当于MVC里的Controller
负责业务逻辑,并在适当时候调用Model和Template
注意
Django还有一个url分发器,作用是将一个个URL分发给不同的View处理
图解
双击放大
说明:1.用户输入URL,通过URL控制器进行正则匹配,匹配到相应的视图函数,交给视图处理;2.视图交给Model去取数据,Model取完数据返回给视图;3.视图再把需要展示的数据传给模板(就是html页面)
安装 Django1.11.4版本
Django与Python对应版本自行百度
安装步骤
进入终端
输入 pip install Django==1.11.4
验证是否安装成功
进入Python环境
import django
django.get_version()
创建项目
创建目录
打开终端进入刚才创建的目录下
输入 django-admin startproject djangodemo(最后一个是项目名称)
输入 tree . /F 查看目录层级
目录层级
manage.py
一个命令行工具,用于我们和Django的交互
project目录
init.py
空文件,告诉Python这个目录应该被看做一个Python包
settings.py
项目配置文件
urls.py
URL分发器,项目的URL声明
wsgi.py
项目与WSGI兼容的web服务器入口
基本操作
设计表结构
数据库的知识,随意设计就行了
班级表
学生表
配置数据库
Django默认数据库是SQLite
settings.py中,通过DATABASES配置数据库
配置MySQL
用pymysql库
在__init__.py中写入两行代码
import pymysql
pymysql.install_as_MySQLdb()
settings.py中
DATABASES = {
'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'djangodemo2','USER': 'root','PASSWORD': '123456','HOST': 'localhost','PORT': '3306',
}
}
####### NAME中填数据库名
####### USER和PASSWORD分别是用户名和密码
####### HOST为数据库服务器ip,直接填本地主机
####### PORT为3306默认端口
创建应用
一个项目可以创建多个应用,每个应用负责一种业务
打开终端,进入项目目录,结构为:
│ manage.py
└─djangodemo2
settings.py
urls.py
wsgi.py
init.py
执行python manage.py startapp myApp
创建一个名为myApp的应用
myApp目录说明
admin.py
站点配置
models.py
模型
views.py
视图
激活应用(将应用配置到项目中)
settings.py文件中,将myApp加入到INSTALLED_APPS中
# Application definition
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类
class Grades(models.Model):
name = models.CharField(max_length=20)
date = models.DateTimeField()
girl_num = models.IntegerField()
boy_num = models.IntegerField()
isDelete = models.BooleanField(default=False)# 更改Grades.objects.all()的输出内容
def __str__(self):return "%s-%d-%d" % (self.name, self.girl_num, self.boy_num)
class Students(models.Model):
name = models.CharField(max_length=20)
gender = models.BooleanField(default=True)
age = models.IntegerField()
contend = models.CharField(max_length=20)
isDelete = models.BooleanField(default=False)
# 外键
grade = models.ForeignKey(“Grades”)
两个类对应库中的两个表,字段名与老师的略有不同
说明:不需要定义主键,主键在生成表时自动添加,并默认值自动添加
生成数据表
生成迁移文件
终端中执行: python manage.py makemigrations
myApp的目录migrations下生成一个迁移文件
执行迁移
终端中执行: python manage.py migrate
数据库中会生成一系列表
如果重新迁移的话,需要删除0001.initial.py文件,把数据库也一块删除,然后再生成迁移文件,再迁移
新增一张表的话不需要重新迁移,直接生成0002的迁移文件,再执行迁移即可
修改原表的字段的话,需要重新迁移
测试操作数据
进入python shell
执行python manage.py shell
引入一些包
from myApp.models import Grades, Students
from django.utils import timezone
from datatime import *
查询班级表所有数据
Grades.objects.all()
添加数据
本质:创建一个模型类的对象实例
grade1 = Grades()
创建一个空实例
grade1.name = ‘python’
名字
grade1.date = datetime(yaer=2020, month=4, day=23)
日期
grade1.save()
将刚才创建的grade1实例传给数据库,创建一条数据
重写类的__str__函数使之更好地显示数据
class Grades(models.Model):
####### name = models.CharField(max_length=20)
####### date = models.DateTimeField()
####### girl_num = models.IntegerField()
####### boy_num = models.IntegerField()
####### isDelete = models.BooleanField(default=False)
####### # 更改Grades.objects.all()的输出内容
####### def str(self):
######## return “%s-%d-%d” % (self.name, self.girl_num, self.boy_num)
查看某个数据
Grades.objects.all()
查询所有
类名.objects.get(pk=2)
查询id为2的那一条数据
分支主题
修改数据
模型对象.属性 = 新值
grade.name = ‘c++’
模型对象.save()
grade.save()
删除数据(物理删除)
g = Grades.objects.get(pk=2)
g.delete()
关联对象
stu = Students()
stu.name = ‘zcz’
…
获得关联对象的集合
需求:获取某个班级的所有学生
类名.关联的类名小写_set.all()
####### grade1.students_set.all()
######## students_set是自带的方法
需求:创建某个人,属于某个班级
stu3 = grade1.setudents_set.create(name=u’曾志伟’, gender=True, …)
会直接添加到数据库,不用再进行save()
启动服务器
格式
python manage.py runserver ip:port
ip不写代表本机ip
port不写默认是8000
说明
Python写的轻量级web服务器,仅在开发测试时使用
启动
打开终端没进入项目目录
python manage.py runserver
别忘了启动数据库
浏览器输入 127.0.0.1:8000检查
分支主题
Admin站点管理
更好的管理数据库的数据,相当于一个后台管理系统
概述
内容发布
负责添加、修改、删除数据
公告访问
配置Admin应用
在settings.py中的INSTALLED_APPS中添加django.contrib.admin
默认已经添加
创建管理员用户
python manage.py createsuperuser
输入账号密码
浏览器127.0.0.1:8000/admin进入
汉化
settings.py文件
LANGUAGE_CODE = ‘zh-Hans’
TIME_ZONE = ‘Asia/Shanghai’
管理数据表
修改admin.py文件
引入models中的类
from .models import Grades, Students
添加注册
admin.site.register(Grades)
admin.site.register(Students)
自定义管理页面
定义类class GradesAdmin(admin.ModelAdmin):
列表页属性
list_display = [‘pk’, ‘name’, ‘date’, ‘girl_num’, ‘boy_num’, ‘isDelete’]
####### 修改页面显示的字段
list_filter = [‘name’]
####### 过滤器,在页面右侧
search_fields = [‘name’]
####### 搜索框
list_per_page = 5
####### 每页最多显示多少条数据
添加、修改页属性
fields = [‘girl_num’, ‘boy_num’, ‘name’, ‘date’, ‘isDelete’]
####### 规定属性的先后顺序
fieldsets = [
(‘num’, {‘fields’: [‘girl_num’, ‘boy_num’]}),
(‘base’, {‘fields’: [‘name’, ‘date’, ‘isDelete’]}),
]
####### 给属性分组
注意:fields和fieldsets不能同时使用
关联对象
需求:在创建一个班级的时候可以同时添加几个学生
####### class StudentsInfo(admin.TabularInline):
######## model = Students
######## extra = 0
####### class StudentsInfo(admin.StackedInline):
######## 和上一个排版不一样
####### class GradesAdmin(admin.ModelAdmin):
######## inlines = [StudentsInfo]
布尔值显示问题
写函数
def sex(self):
if self.gender:return '男'
else:return '女'
设置页面列的名称
sex.short_description = ‘性别’
list_display = [‘pk’, ‘name’, ‘age’, sex, ‘contend’, ‘grade’, ‘isDelete’]
执行动作的位置问题
actions_on_bottom = True
actions_on_top = False
使用装饰器完成注册
@admin.register(Students)
class StudentsAdmin(admin.ModelAdmin):
分支主题
视图的基本使用
概述
在django中,视图对web请求进行回应
视图就是一个Python函数, 在views.py文件中定义
定义视图
from django.http import HttpResponse
def index(request):
return HttpResponse('zcz is a goood boy. ')
配置url
修改project目录下的urls.py文件
from django.conf.urls import url, include
from django.contrib import admin
urlpatterns = [
url(r’^admin/’, admin.site.urls),
url(r’^’, include(‘myApp.urls’)),
]
在myApp应用目录下创建一个urls.py文件
from django.conf.urls import url
from . import views
urlpatterns = [
url(r’^KaTeX parse error: Undefined control sequence: \d at position 27: …dex), url(r'^(\̲d̲+)/’, views.detail),
url(r’^grades/′,views.grades),url(r′students/', views.grades), url(r'^students/′,views.grades),url(r′students/’, views.students),
url(r’^grades/(\d+)/$’, views.get_student_id),
]
模板的基本使用
概述
模板就是HTML页面,可以根据视图传过来的数据对页面进行填充
创建模板
新建templates文件夹
在templates中新建myApp文件夹
配置模板路径
修改settings.py文件下的TEMPLATES
‘DIRS’: [os.path.join(BASE_DIR, ‘templates’)],
定义grades.html和students.html模板
模板语法
{{ 输出值,可以使变量,可以使对象.属性 }}
{% 执行代码 %}
http://127.0.0.1:8000/grades
写grades.html模板
{% for grade in grades %}
- {{ grade.name }}
- {% endfor %}
定义视图
from .models import Grades, Students
def grades(request):
# 去模型里取数据
grades_list = Grades.objects.all()
# 将数据传递给模板, 模板再渲染页面, 将渲染好的页面返回给浏览器
return render(request, ‘myApp/grades.html’, {‘grades’: grades_list})配置URL
url(r’^grades/$’, views.grades),
说明:代码只有部分,全代码仍需要去看视频
流程总结
写模板,也就是HTML页面
页面要与数据库交互,因此要定义视图
视图负责去模型中取得相应的数据(因为模型负责和数据库对接,所以要拿数据库的数据必须经过模型)
视图在模型中取得了相应的数据,再返回给模板渲染
点击班级,显示对应班级的所有学生
定义视图
def get_student_id(request, num):
grade = Grades.objects.get(pk=num)
####### 获得对应的班级对象
student_list = grade.students_set.all()
####### 获得该班级的学生列表
return render(request, ‘myApp/students.html’, {‘students’: student_list})
配置url
url(r’^grades/(\d+)/$’, views.get_student_id),
流程解析
点击grades.html页面的超链接,观察地址栏,可以看到会返回类似于localhost:8000/grades/1的地址,所以需要配置相应的url
而数据的处理需要交给views层,所以需要定义相对应的视图
需要注意,虽然地址栏是grades/1,但是显示的是students.html的内容,原因是视图返回了myApp/students.html以及相对应的学生列表
说明:代码仍旧不全,全代码还请去看视频
流程梳理
创建工程
执行 dijango-admin startproject project
创建项目
执行 python manage.py startapp myApp
激活项目
修改 settings.py中的INSTALLED_APPS
配置数据库
修改__init__.py,引入pymysql包
修改settings.py文件中的DATABASES
创建模型类
在项目目录下的models.py文件中
生成迁移文件
执行 python manage.py makemigrations
执行迁移
执行 python manage.py migrate
配置ADMIN站点
创建模板目录/项目模板目录
在settings.py文件的TEMPLATES中配置模板路径
在project下修改urls.py
在项目目录下创建urls.py
Django1.11.4之基本流程走通设计模式MVC核心思想解耦浏览器请求发送给Controller,Controller把需求发给Model,Model返回数据给Controller,Controller把数据传送给View渲染,View返回给浏览器编程模式Model(模型)应用程序中处理数据逻辑的部分通常模型对象负责在数据库中存取数据View(视图)处理数据显示的部分通常视图是依据模型数据创建的Controller(控制器)处理用户交互的部分负责从视图读取数据,通知用户输入,并向模型发送数据优点降低了各功能模块之间的耦合性,方便重构代码,最大程度上实现了代码重用MTV概述本质与MVC没有区别,各组件之间为了保持松耦合关系编程模式Model(模型)负责业务对象与数据库的对象(ORM)Template(模板)相当于MVC里的View负责把页面展示给用户View(视图)相当于MVC里的Controller负责业务逻辑,并在适当时候调用Model和Template注意Django还有一个url分发器,作用是将一个个URL分发给不同的View处理图解双击放大说明:1.用户输入URL,通过URL控制器进行正则匹配,匹配到相应的视图函数,交给视图处理;2.视图交给Model去取数据,Model取完数据返回给视图;3.视图再把需要展示的数据传给模板(就是html页面)安装 Django1.11.4版本Django与Python对应版本自行百度安装步骤进入终端输入 pip install Django==1.11.4验证是否安装成功进入Python环境import djangodjango.get_version()创建项目创建目录打开终端进入刚才创建的目录下输入 django-admin startproject djangodemo(最后一个是项目名称)输入 tree . /F 查看目录层级目录层级manage.py一个命令行工具,用于我们和Django的交互project目录__init__.py空文件,告诉Python这个目录应该被看做一个Python包settings.py项目配置文件urls.pyURL分发器,项目的URL声明wsgi.py项目与WSGI兼容的web服务器入口基本操作设计表结构数据库的知识,随意设计就行了班级表学生表配置数据库Django默认数据库是SQLitesettings.py中,通过DATABASES配置数据库配置MySQL用pymysql库在__init__.py中写入两行代码import pymysql\npymysql.install_as_MySQLdb()settings.py中DATABASES = {\n 'default': {\n 'ENGINE': 'django.db.backends.mysql',\n 'NAME': 'djangodemo2',\n 'USER': 'root',\n 'PASSWORD': '123456',\n 'HOST': 'localhost',\n 'PORT': '3306',\n }\n}NAME中填数据库名USER和PASSWORD分别是用户名和密码HOST为数据库服务器ip,直接填本地主机PORT为3306默认端口创建应用一个项目可以创建多个应用,每个应用负责一种业务打开终端,进入项目目录,结构为:│ manage.py\n└─djangodemo2\n settings.py\n urls.py\n wsgi.py\n __init__.py执行python manage.py startapp myApp创建一个名为myApp的应用myApp目录说明admin.py站点配置models.py模型views.py视图激活应用(将应用配置到项目中)settings.py文件中,将myApp加入到INSTALLED_APPS中# Application definition\n\nINSTALLED_APPS = [\n 'django.contrib.admin',\n 'django.contrib.auth',\n 'django.contrib.contenttypes',\n 'django.contrib.sessions',\n 'django.contrib.messages',\n 'django.contrib.staticfiles',\n 'myApp'\n]定义模型(对接数据库)一个数据库表对应一个模型在models.py中定义from django.db import models模型类要继承models.Model类class Grades(models.Model):\n name = models.CharField(max_length=20)\n date = models.DateTimeField()\n girl_num = models.IntegerField()\n boy_num = models.IntegerField()\n isDelete = models.BooleanField(default=False)\n\n # 更改Grades.objects.all()的输出内容\n def __str__(self):\n return "%s-%d-%d" % (self.name, self.girl_num, self.boy_num)\n\n\nclass Students(models.Model):\n name = models.CharField(max_length=20)\n gender = models.BooleanField(default=True)\n age = models.IntegerField()\n contend = models.CharField(max_length=20)\n isDelete = models.BooleanField(default=False)\n # 外键\n grade = models.ForeignKey("Grades")两个类对应库中的两个表,字段名与老师的略有不同说明:不需要定义主键,主键在生成表时自动添加,并默认值自动添加生成数据表生成迁移文件终端中执行: python manage.py makemigrations myApp的目录migrations下生成一个迁移文件执行迁移终端中执行: python manage.py migrate数据库中会生成一系列表如果重新迁移的话,需要删除0001.initial.py文件,把数据库也一块删除,然后再生成迁移文件,再迁移新增一张表的话不需要重新迁移,直接生成0002的迁移文件,再执行迁移即可修改原表的字段的话,需要重新迁移测试操作数据进入python shell执行python manage.py shell引入一些包from myApp.models import Grades, Students\nfrom django.utils import timezone\nfrom datatime import *查询班级表所有数据Grades.objects.all()添加数据本质:创建一个模型类的对象实例grade1 = Grades()创建一个空实例grade1.name = 'python'名字grade1.date = datetime(yaer=2020, month=4, day=23)日期grade1.save()将刚才创建的grade1实例传给数据库,创建一条数据重写类的__str__函数使之更好地显示数据class Grades(models.Model):name = models.CharField(max_length=20)date = models.DateTimeField()girl_num = models.IntegerField()boy_num = models.IntegerField()isDelete = models.BooleanField(default=False)# 更改Grades.objects.all()的输出内容def __str__(self):return "%s-%d-%d" % (self.name, self.girl_num, self.boy_num)查看某个数据Grades.objects.all()查询所有类名.objects.get(pk=2)查询id为2的那一条数据分支主题修改数据模型对象.属性 = 新值grade.name = 'c++'模型对象.save()grade.save()删除数据(物理删除)g = Grades.objects.get(pk=2)g.delete()关联对象stu = Students()stu.name = 'zcz'......获得关联对象的集合需求:获取某个班级的所有学生类名.关联的类名小写_set.all()grade1.students_set.all()students_set是自带的方法需求:创建某个人,属于某个班级stu3 = grade1.setudents_set.create(name=u'曾志伟', gender=True, ......)会直接添加到数据库,不用再进行save()启动服务器格式python manage.py runserver ip:portip不写代表本机ipport不写默认是8000说明Python写的轻量级web服务器,仅在开发测试时使用启动打开终端没进入项目目录python manage.py runserver别忘了启动数据库浏览器输入 127.0.0.1:8000检查分支主题Admin站点管理更好的管理数据库的数据,相当于一个后台管理系统概述内容发布负责添加、修改、删除数据公告访问配置Admin应用在settings.py中的INSTALLED_APPS中添加django.contrib.admin默认已经添加创建管理员用户python manage.py createsuperuser输入账号密码浏览器127.0.0.1:8000/admin进入汉化settings.py文件LANGUAGE_CODE = 'zh-Hans'\n\nTIME_ZONE = 'Asia/Shanghai'管理数据表修改admin.py文件引入models中的类from .models import Grades, Students添加注册admin.site.register(Grades)\nadmin.site.register(Students)自定义管理页面定义类class GradesAdmin(admin.ModelAdmin):列表页属性list_display = ['pk', 'name', 'date', 'girl_num', 'boy_num', 'isDelete']修改页面显示的字段list_filter = ['name']过滤器,在页面右侧search_fields = ['name']搜索框list_per_page = 5每页最多显示多少条数据添加、修改页属性fields = ['girl_num', 'boy_num', 'name', 'date', 'isDelete']规定属性的先后顺序fieldsets = [\n('num', {'fields': ['girl_num', 'boy_num']}),\n('base', {'fields': ['name', 'date', 'isDelete']}),\n]给属性分组注意:fields和fieldsets不能同时使用关联对象需求:在创建一个班级的时候可以同时添加几个学生class StudentsInfo(admin.TabularInline):model = Studentsextra = 0class StudentsInfo(admin.StackedInline):和上一个排版不一样class GradesAdmin(admin.ModelAdmin):inlines = [StudentsInfo]布尔值显示问题写函数def sex(self):\n if self.gender:\n return '男'\n else:\n return '女'\n# 设置页面列的名称\nsex.short_description = '性别'\nlist_display = ['pk', 'name', 'age', sex, 'contend', 'grade', 'isDelete']执行动作的位置问题actions_on_bottom = True\nactions_on_top = False使用装饰器完成注册@admin.register(Students)\nclass StudentsAdmin(admin.ModelAdmin):分支主题视图的基本使用概述在django中,视图对web请求进行回应视图就是一个Python函数, 在views.py文件中定义定义视图from django.http import HttpResponsedef index(request):return HttpResponse('zcz is a goood boy. ')配置url修改project目录下的urls.py文件from django.conf.urls import url, include\nfrom django.contrib import admin\n\n\nurlpatterns = [\n url(r'^admin/', admin.site.urls),\n url(r'^', include('myApp.urls')),\n\n]在myApp应用目录下创建一个urls.py文件from django.conf.urls import url\n\nfrom . import views\n\nurlpatterns = [\n url(r'^$', views.index),\n url(r'^(\d+)/$', views.detail),\n url(r'^grades/$', views.grades),\n url(r'^students/$', views.students),\n url(r'^grades/(\d+)/$', views.get_student_id),\n]模板的基本使用概述模板就是HTML页面,可以根据视图传过来的数据对页面进行填充创建模板新建templates文件夹在templates中新建myApp文件夹配置模板路径修改settings.py文件下的TEMPLATES'DIRS': [os.path.join(BASE_DIR, 'templates')],定义grades.html和students.html模板模板语法{{ 输出值,可以使变量,可以使对象.属性 }}{% 执行代码 %}http://127.0.0.1:8000/grades写grades.html模板{% for grade in grades %}\n<li>\n <a href="#">{{ grade.name }}</a>\n</li>\n{% endfor %}定义视图 from .models import Grades, Students\ndef grades(request):\n # 去模型里取数据\n grades_list = Grades.objects.all()\n # 将数据传递给模板, 模板再渲染页面, 将渲染好的页面返回给浏览器\n return render(request, 'myApp/grades.html', {'grades': grades_list})配置URL url(r'^grades/$', views.grades),说明:代码只有部分,全代码仍需要去看视频流程总结写模板,也就是HTML页面页面要与数据库交互,因此要定义视图视图负责去模型中取得相应的数据(因为模型负责和数据库对接,所以要拿数据库的数据必须经过模型)视图在模型中取得了相应的数据,再返回给模板渲染点击班级,显示对应班级的所有学生定义视图def get_student_id(request, num):grade = Grades.objects.get(pk=num)获得对应的班级对象student_list = grade.students_set.all()获得该班级的学生列表return render(request, 'myApp/students.html', {'students': student_list})配置urlurl(r'^grades/(\d+)/$', views.get_student_id),流程解析点击grades.html页面的超链接,观察地址栏,可以看到会返回类似于localhost:8000/grades/1的地址,所以需要配置相应的url而数据的处理需要交给views层,所以需要定义相对应的视图需要注意,虽然地址栏是grades/1,但是显示的是students.html的内容,原因是视图返回了myApp/students.html以及相对应的学生列表说明:代码仍旧不全,全代码还请去看视频流程梳理创建工程执行 dijango-admin startproject project创建项目执行 python manage.py startapp myApp激活项目修改 settings.py中的INSTALLED_APPS配置数据库修改__init__.py,引入pymysql包修改settings.py文件中的DATABASES创建模型类在项目目录下的models.py文件中生成迁移文件执行 python manage.py makemigrations执行迁移执行 python manage.py migrate配置ADMIN站点创建模板目录/项目模板目录在settings.py文件的TEMPLATES中配置模板路径在project下修改urls.py在项目目录下创建urls.py
链接:https://pan.baidu.com/s/1ZAV4lmCxfR_7nFYIgG3UKQ
Django1.11.4框架简介(一)相关推荐
- 《HiWind企业快速开发框架实战》(0)目录及框架简介
<HiWind企业快速开发框架实战>(0)目录及框架简介 本系列主要介绍一款企业管理系统快速开发框架,该框架旨在快速完成企业管理系统,并实现易维护可移植的目标. 使用逐个系统模块进行编码的 ...
- Django框架简介
Django框架简介 MVC框架和MTV框架 MVC,全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View) ...
- 【转】.NET框架简介
.NET 框架是由微软开发的软件开发平台,其最主要的两个组成部分是公共语言运行时 (CLR) 和框架类库 (FCL),基础类库 (BCL)是框架类库的一个子集. .NET 框架简介 下图展示了 .NE ...
- freecplus框架简介
文章目录 一.freecplus框架简介 二.freecplus开源许可协议 三.freecplus框架内容 字符串操作 2.xml解析 3.日期时间 4.目录操作 5.文件操作 6.日志文件 7.参 ...
- 爬虫基础(五)-----scrapy框架简介
---------------------------------------------------摆脱穷人思维 <五> :拓展自己的视野,适当做一些眼前''无用''的事情,防止进入只关 ...
- 分布式电商项目十四:Vue前端框架简介及使用
Vue前端框架简介及使用 就像是后端我们使用springboot来进行开发一样,前端需要使用Vue框架进行开发.由于前端不是我们的主要内容,所以只介绍简单的使用内容.具体更深的内容请参考Vue的官方网 ...
- delphi源码三层框架【框架简介】
一,框架简介 1,本套源码主要是用来开发企业应用系统如:erp ,mes,hrms,进销存等制造业内部应用系统:跟网上 常见的delphi中间件相比,功能更丰富,开发便捷.若用来开发一些几千上万的高并 ...
- 第三方框架简介ios
第三方框架简介iOS 图像 1.图片浏览控件MWPhotoBrowser 实现了一个照片浏览器类似 iOS 自带的相册应用,可显示来自手机的图片或者是网络图片,可自动从网络下载图片并进行缓存.可对图片 ...
- 【小白学爬虫连载(1)】-爬虫框架简介
欢迎大家关注公众号[哈希大数据] [小白学爬虫连载(1)]-爬虫框架简介 [小白学爬虫连载(2)]--Requests库介绍 [小白学爬虫连载(3)]--正则表达式详细介绍 [小白学爬虫连载(4)]- ...
最新文章
- Java的12个语法糖【转】
- java dom 解析xml 例子,Java DOM解析XML的幾個例子
- 我自学python的路-Python的学习路经
- 用PHP写一个最简单的解释器Part1
- Git如何生成多个ssh key添加到ssh-agent管理项目
- SC命令---安装、开启、配置、关闭windows服务 bat批处理(转载)
- Vue中默认main.js
- [嵌入式]I2C协议指东
- linux培训课程第一天:ppt以及笔记
- kafka权威指南学习笔记
- SpringBoot实现Excel、Word转换为PDF
- 电脑版微信每天自动发送
- 架构师的岗位职责和要求
- android 8.0图标适配
- 拍牌(沪牌)软件编写ideal(C#)------序
- 解决JSONNull导致的JSONObject序列化问题
- arduino中print()跟write()最大区别和注意事项 (最详细)
- 重力传感事件应用之一 手机摇一摇(摇一次得一分)
- Python 五行代码实现类似全能扫描王和office Lens的扫描彩色增强滤镜效果
- 企业数字化转型之传统IT架构改造