目录
1. Django框架介绍
1.1什么是框架?
软件框架就是为实现或完成某种软件开发时,提供了一些基础的软件产品;
框架的功能类似于基础设施 ,提供并实现最为基础的软件架构和体系;
通常情况下我们依据框架来实现更为复杂的业务程序开发;
二个字,框架就是程序的骨架
1.2Python 中常见的框架有哪些?
大包大揽 Django 被官方称之为完美主义者的Web框架。
力求精简 web.py 和 Tornado
新生代微框架 Flask 和 Bottle
Django 是一个高级的Python Web框架,它鼓励快速开发和清洁,务实的设计。
由经验丰富的开发人员构建,它负责Web开发的许多麻烦,因此您可以专注于编写应用程序,而无需重新创建轮子。
免费的和开源的。
被官方称之为完美主义者的Web框架。
官方网址:https://www.djangoproject.com/
1.3 Django 的安装
在线安装Django,指定版本安装
pip install Django -i https://pypi.douban.com/simple
2.后台管理
通过简单示例,使用 Django 完成基本流程的开发,学习 Django 的主要的知识点。
第一步:项目的创建与运行
第一次使用 Django ,那么你必须要照顾一些初始设置。也就是说,您需要自动生成一些建立 Django项目的代码。
法一:
从命令行 cd 到您要存储代码的目录,然后运行以下命令:
进入项目目录,目录结构如下图:
在线安装Django,指定版本安装 pip install Django -i https://pypi.douban.com/simple
django-admin startproject mydjangoproject
再用pycharm打开建立的此目录就可以了
法二:
打开后如下图:
目录说明:
manage.py :一个命令行工具,可以使你用多种方式对 Django 项目进行交互
内层的目录:项目的真正的Python包
_ init _.py :一个空文件,它告诉Python这个目录应该被看做一个Python包
settings.py :项目的配置
urls.py :项目的URL声明
wsgi.py :项目与 WSGI 兼容的Web服务器入口
按照运行给出的ip与端口进行访问测试:
第二步:应用的创建和使用
(1) 创建第一个应用程序
Django 自带一个实用程序,可以自动生成应用程序的基本目录结构,因此您可以专注于编写代码而不是创建目录。
在一个项目中可以创建一到多个应用,每个应用进行一种业务处理
创建应用的命令:
python3 manage.py startapp bookApp
(2) 编写第一个视图函数
我们来写第一个视图。打开文件 bookApp/views.py 并放入以下Python代码:
(3) 路由规则
要在 bookApp 目录中创建一个 URLconf ,创建一个名为 urls.py 。如下所示:
根据配置文件 mydrangoproject/settings 可知路由查找的主文件是 mydrangoproject/urls.py , 因此在该文件
添加一条 url 规则
include()函数允许引用其他 URLconfs 。
(4) 效果展示
启动服务器
因为有新建的文件,所以需要重新运行一下
访问 url 地址: http:// 127.0.0.1:8000/book/ 如果看到主页内容即成功。
修改为html格式:
url() 函数介绍
Django url() 可以接收四个参数,分别是两个必选参数:
regex 、 view 和两个可选参数:
kwargs 、 name 。
regex : 正则表达式,与之匹配的 URL 会执行对应的第二个参数 view。
view : 用于执行与正则表达式匹配的 URL 请求。
kwargs : 视图使用的字典类型的参数。
name : 用来反向获取 URL
第三步:项目的数据库模型
本示例完成“图书-英雄”信息的维护,需要存储两种数据:图书、英雄
图书表结构设计: 表名: Book
图书名称: title
图书发布时间: pub_date
英雄表结构设计: 表名: Hero
英雄姓名: name
英雄性别: gender
英雄简介: hcontent
所属图书: hbook
图书-英雄的关系为一对多
(1). 创建数据库模型
创建model模型
from django.db import models
"""
名词:
ORM(Object Ralational Mapping,对象关系映射)用来把对象模型表示的对象映射到基于S Q L 的关系模型数据库结构中去。
这样,我们在具体的操作实体对象的时候,就不需要再去和复杂的 SQ L 语句打交道,只需简单的操作实体对象的属性和方法。
一对多关系:外键写在多的一端
book:hero = 1:n
"""
# Create your models here.
# 类对应数据库表, 表名称默认为bookApp_book.
class Book(models.Model):
# 属性对应数据库表的列名,默认会添加id这一列。
name = models.CharField(max_length=40, verbose_name="书籍名称")
pub_date = models.DateField(verbose_name="出版日期")
# 类对应数据库表, 表名称默认为bookApp_hero.
class Hero(models.Model):
# 属性对应数据库表的列名,默认会添加id这一列。
gender_choice = [
(1, "男"),
(2, "女")
]
name = models.CharField(max_length=20, verbose_name="人物名称")
# 性别只能选择男(1)或者女(2)
gender = models.IntegerField(choices=gender_choice, verbose_name="性别") # 1, 2
content = models.TextField(max_length=1000, verbose_name="人物描述")
# 外键关联, 如果删除书籍时,相关hero对应的书籍设置为空。
book_id = models.ForeignKey(Book, on_delete=models.SET_NULL,
null=True, verbose_name="书籍id")
在settings.py导入子应用程序
(2). 生成数据库表
查看是否创建成功
(3). 数据库模型基本操作
- 现在进入交互式的Python shell,并使用 Django 提供的免费 API
python manage.py shell
- 引入需要的包
- 查询所有图书信息
需要编辑models.py,设定魔术方法(字符串友好展示,便于调试代码)
def _ str _(self):
return self.name
退出在进入后可查看到书名
- 根据条件搜索并查看
- 查找图书信息
- 修改图书信息
- 删除图书信息
- 添加关联对象
书籍的创建
book = Book(name=“倚天屠龙记”, pub_date=date(2000,1,1)) book.save()
人物的创建
hero1 = Hero(name=“周芷若”, gender=2, content=“info…”)
外键关联
hero1.book_id=book
hero1.save()
有一个 Hero 存在,必须要有一个 Book 对象,提供了创建关联的数据:
book.hero_set.create(name=“张无忌”, gender=True, content=“武当派第二代“张五侠”张翠山与天鹰教紫微堂堂主殷素素的儿子”)
获得关联集合:返回当前book对象的所有hero
book.hero_set.all()
第四步: 启用后台Admin 站点管理
站点分为“内容发布(后台管理)”和“公共访问(前台管理)”两部分
—“内容发布”的部分负责添加、修改、删除内容,开发这些重复的功能是一件单调乏味、缺乏创造力的工作。
因此, Django 会根据定义的模型类完全自动地生成管理模块
Django 框架中有一个非常强大的应用功能: 自动管理界面。 常被Web平台管理者使用,去管理整个Web平台。
默认情况下,在 settings.py 配置文件中 INSTALLED_APPS 包含以下应用程序,为了后续的开发,默认这些应用程序都是包含在里面的。
(0). 数据库迁移
使用这些 Django 自带的应用程序,需要我们在数据库中创建一些数据表对应,然后才能使用它们。
生成迁移文件:根据模型类生成 sql 语句
执行迁移:执行 sql 语句生成数据表
查看:
显示如下:
路径设置:
(1). 创建管理员用户
启动服务器,通过 “127.0.0.1:8000/admin” 访问,输入上面创建的用户名、密码完成登录
进入管理站点,默认可以对 groups、users 进行管理
(2). 管理界面本地化
默认语言为英文,若想本地化(汉化),执行以下操作
编辑 settings.py 文件,设置编码、时区
无需再runserver,重新访问一次就会变成中文
(3). 自定义模型加入后台管理
打开 bookApp/admin.py 文件,注册模型
刷新管理页面,可以对 Book 的数据进行增删改查操作
问题: 后台管理时, Book管理显示的是英文, 如何变成中文?
class Meta:
# 单数时显示的名称
verbose_name = '图书信息'
# 复数时显示的名称
verbose_name_plural = '图书信息'
class Meta:
verbose_name = '人物信息'
verbose_name_plural = '人物信息'
(4). 自定义管理页面
Django 提供了 admin.ModelAdmin 类
通过定义 ModelAdmin 的子类,来定义模型在 Admin 界面的显示方式
from django.contrib import admin
from bookApp.models import Book,Hero
# Register your models here.
#关联对象
#对于 Hero 模型类,有两种注册方式
#方式一:与 Book 模型类相同
#方式二:关联注册
#admin.StackedInline : 内嵌关联注册类
#admin.TabularInline : 表格 关联注册类
class HeroInline(admin.StackedInline):
model = Hero
extra = 2
# 书籍自定义管理页面
class BookAdmin(admin.ModelAdmin):
# 列表页展示的设置
list_display = ['id', 'name', 'pub_date']
list_filter = ['pub_date']
search_fields = ['name']
list_display_links = ['name']
list_per_page = 5
inlines = [HeroInline]
# 人物自定义管理页面
class HeroAdmin(admin.ModelAdmin):
# 列表页展示的设置
list_display = ['id', 'name', 'gender']
list_filter = ['gender']
search_fields = ['name', 'content']
list_display_links = ['name']
list_per_page = 5
# 添加、修改页属性
# 增加和编辑页的设置
#fields:属性的先后顺序 (fields = ['pub_date', 'name'])
#fieldsets :属性分组, 注意: fields和fieldsets只能设置一个
fieldsets = [('必填信息', {'fields': ['name', 'book_id']}),
('选填信息', {'fields': ['gender', 'content']}), ]
# 关联注册
admin.site.register(Book, BookAdmin)
admin.site.register(Hero, HeroAdmin)
- get