目录
Python下有许多款不同的 Web 框架。Django是重量级选手中最有代表性的一位。许多成功的网站和APP都基于Django。
Django是一个开放源代码的Web应用框架,由Python写成。
Django遵守BSD版权,初次发布于2005年7月, 并于2008年9月发布了第一个正式版本1.0 。
Django采用了MVC的软件设计模式,即模型M,视图V和控制器C
概述:
一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。
MVC编辑模式
Model(模型):
- 是应用程序中用于处理应用程序数据逻辑的部分
- 通常模型对象负责在数据库中存取数据
View(视图)
- 是应用程序中处理数据显示的部分
- 通常视图是依据模型数据创建的
Controller(控制器)
- 是应用程序中处理用户交互的部分
- 通常控制器负责从视图中读取数据,控制用户输入,并向模型发送数据
Django安装
如何获得Django
Django是BSD许可下的开源软件。我们建议使用最新版本的Python 3.支持Python 2.7的最后一个版本是Django 1.11 LTS。有关每个Django版本支持的Python版本,以下是如何获得它:
选项1:获取最新的正式版
最新的官方版本是2.2.5。阅读 2.2.5发行说明,然后使用pip安装 :
pip install Django==2.2.5
删除Django是:pip uninstall Django
创建Django项目
创建的项目设计:
在合适位置创建一个目录
打开黑屏终端进入到上一步创建的目录下,输入django-admin startproject project
在这个文件夹下面生成了一个project目录
使用pycharm打开这个文件
配置数据库
注意:Django默认使用SQLlite数据库
去project中settings.py文件
默认使用的是SQL数据库,但是我不使用SQL数据库
在settings.py文件中,通过DATABASES选项来进行数据库配置
python3.x安装的是PyMySQL
在__init__.py文件中写入两行代码
import pymysql
pymysql.install_as_MySQLdb()
创建一个数据库
将settings.py中DATABASES里面的内容进行修改,NAME改为数据库的名字
配置示例:
创建业务
在一个项目中可以创建多个应用,每个应用进行一种业务处理
打开黑屏终端,进入django文件夹下的project目录下
输入:python manage.py startapp myApp
在过程中可能出现的问题
raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__)
django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3.
解决方法:
C:\Python37\Lib\site-packages\django\db\backends\mysql(python安装目录)打开base.py,注释掉以下内容:
if version < (1, 3, 13):
raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__)
现在在文件夹中出现了myApp
myApp的目录说明:
激活应用
在settings.py文件中,将myApp加入到INSTALLED_APPS中
定义模型
概述:有一个数据表,就对应有一个模型
在model.py文件中定义模型,模型类要继承models.Model类
在models.py中的代码:
from django.db import models
# Create your models here.
class Grades(models.Model):
gname = models.CharField(max_length=20) #班级名称
gdate = models.DateTimeFieldField() #日期
gboynum = models.IntegerField()
ggirlnum = 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()
scontent = models.CharField(max_length=20)
sgrade = models.ForeignKey('Grades',on_delete=models.CASCADE) #班级是外键,关联Grades类
isDelete = models.BooleanField(default=False)
说明:不需要定义主键,在生成时自动添加,并且值为自动添加
注意:在添加外键时需要加入on_delete=models.CASCADE,否则在之后执行生成迁移文件命令时将会报错
在数据库中生成数据表
生成迁移文件
在project目录下,执行命令:python manage.py makemigrations
可能出现的错误:
找到这个文件,对编码进行修改
修改代码:
执行成功之后的显示:
但是我在MySQL数据中查看是发现并没有产生表格,我后来在网上找到了一篇博客进行了解释
https://blog.csdn.net/hpu_yly_bj/article/details/78928089
因为刚刚的命令仅仅是在migrations下生成迁移文件,还未迁移
执行迁移
使用python manage.py sqlmugrate appname 文件名对刚刚具体执行了什么语句进行查看
使用python manage.py migrate appname 文件名重新迁移
现在产生了表
测试数据操作
进入到python shell环境
命令:python manage.py shell
引入包
命令:
- from myApp.models import Grades,students
- from django.utils import timezone
- from datetime import *
查询所有数据
命令:类名.objects.all()
添加数据
本质:是创建一个模型类的对象实例
现在在数据库中查看表
使用类名.objects.all()进行查询
查看某一条的记录: 类名.objects.get(pk=数据index)
删除数据
命令:模型对象.delete()
物理删除,数据库的表里的数据被删除了
关联对象
创建一个学生模型对象
获得关联对象的集合,例如:需求获取python03班的所有学生
新建一些学生对象
命令:对象名.关联的类名小写_set.all()
启动服务器
格式:python manage.py runserver ip:port
注意:ip可以不写,不写的话代表本机ip。端口号默认是8000
这是一个纯python写的轻量级web服务器,仅仅在开发测试中使用
在网页上访问127.0.0.1:8000
Admin站点管理
概述:内容发布和公共访问
内容发布:负责添加、修改、删除数据的
配置Admin应用
在settings.py文件中的INSTALLED_APPS添加 'django.contrib.admin' 默认是已经添加好了
创建管理员用户
创建超级用户,命令:python manage.py createsuperuser
依次输入用户名、邮箱、密码
刚刚创建的超级用户信息存储在数据库的auth_user表中
创建好了之后运行服务器,进入http://127.0.0.1:8000/admin中
输入自己创建好的用户名和密码,进入新的界面
现在这个界面是英语,如果想变成中文需要汉化
将settings.py中的
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
修改为
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
刷新页面,页面中就变成中文了
修改数据表
修改admin.py文件
from django.contrib import admin
# Register your models here.
#引入两张表
from .models import Grades,students
#注册
admin.site.register(Grades)
admin.site.register(students)
重启服务器,班级和学生数据已经存在
点击Gradess和Studentss会出现之前存储的信息
自定义管理页面
修改admin.py文件
在里面设置一个class类
from django.contrib import admin
# Register your models here.
#引入两张表
from .models import Grades,students
#注册
class GradesAdmin(admin.ModelAdmin):
#列表页属性
#显示字段
list_display = ['pk','gname','gdate','gboynum','ggirlnum']
#过滤字段
list_filter = ['gname']
#查找字段
search_fields = ['gname']
#分页,超过5条数据会分页
list_per_page = 5
#添加修改页属性,注意:fields和fieldsets不能同时使用
# 规定属性的先后顺序
#fields = []
#给属性分组
fieldsets = [
('num',{'fields':['gboynum','ggirlnum']}),
('base',{'fields':['gname','gdate','isDelete']}),
]
admin.site.register(Grades,GradesAdmin)
admin.site.register(students)
重启服务器
可以对班级进行增加
保存之后就新出现了一个班级
关联对象
需求:在创建一个班级时,直接添加几个学生
#注册班级时加入两个学生
class StudentsInfo(admin.TabularInline):
model = students
extra = 2
#注册
class GradesAdmin(admin.ModelAdmin):
inlines = [StudentsInfo]
#列表页属性
#显示字段
list_display = ['pk','gname','gdate','gboynum','ggirlnum']
#过滤字段
list_filter = ['gname']
#查找字段
search_fields = ['gname']
#分页,超过5条数据会分页
list_per_page = 5
#添加修改页属性,注意:fields和fieldsets不能同时使用
# 规定属性的先后顺序
#fields = []
#给属性分组
fieldsets = [
('num',{'fields':['gboynum','ggirlnum']}),
('base',{'fields':['gname','gdate','isDelete']}),
]
刷新页面,点击创建班级时会在下面要填入两个学生的信息
同理可以在admin.py修改学生的显示
class StudentsAdmin(admin.ModelAdmin):
def gender(self):
if self.sgender:
return '男'
else:
return '女'
#设置页面列的名称
gender.short_description = '性别'
list_display = ['pk', 'sname', 'sage', gender, 'scontent','sgrade','isDelete']
admin.site.register(students,StudentsAdmin)
还可以使用装饰器去完成注册,效果是一样的。
@admin.register(students)
class StudentsAdmin(admin.ModelAdmin):
def gender(self):
if self.sgender:
return '男'
else:
return '女'
#设置页面列的名称
gender.short_description = '性别'
list_display = ['pk', 'sname', 'sage', gender, 'scontent','sgrade','isDelete']
#admin.site.register(students,StudentsAdmin)
一起学习,一起进步 -.- ,如有错误,可以发评论