说明:Django框架入门
当前项目环境:python3.5、django-1.11
test1
booktest
命令可简写为:python manager.py xxx => ./manager.py xxx
准备:已经安装python并加入环境变量
已安装 django
设计框架对比(引用,可自行搜索):
1、MVC
MVC框架的核心思想是:解耦
降低各功能模块之间的耦合性,方便变更,更容易重构代码,最大程度上实现代码的重用
m表示model,主要用于对数据库的封装
v表示view,用于向用户展示结果
c表示controller,是核心,用户处理请求,获取数据,返回结果
2、MVT
Django属于MVT框架
m表示model,负责与数据库交互
v表示view,是核心,负责接收请求、获取数据、返回结果
t便是template,负责呈现内容到浏览器
个人觉得两种框架基本大同小异
一、开始
test1
> django-admin startproject test1
booktest
> python manager.py startapp booktest
创建完成,可以看到项目下booktes目录
3、启动服务器,测试
> python manager.py runserver [8080]
端口号可以指定,默认8000
127.0.0.1:8080
二、创建模型:
打开booktest目录下的 models.py文件,编辑如下
1 from django.db import models
2 """
3 models文件的作用:
4 1、根据models的定义去生成SQL语句,并创建表
5 2、创建对象,对对象进行各种操作
6 图书-英雄的关系为一对多
7 """
8
9
10 # 图书表
11 class BookInfo(models.Model):
12 # 默认自动生成id
13 # 图书名称
14 btitle = models.CharField(max_length=20)
15 # 图书发布时间
16 bpub_data = models.DateTimeField()
17
18 def __str__(self):
19 return self.btitle
20
21
22
23 # 英雄表
24 class HeroInfo(models.Model):
25 # 英雄姓名
26 hname = models.CharField(max_length=10)
27 # 英雄性别
28 hgender = models.BooleanField()
29 # 英雄简介
30 hcontent = models.CharField(max_length=500)
31 # 所属图书 : 外键引用对象
32 hbook = models.ForeignKey(BookInfo)
三、生成数据表
settings.py文件,将booktest应用加入到INSTALLED_APPS下,编辑之后如下:
1 INSTALLED_APPS = [
2 'django.contrib.admin',
3 'django.contrib.auth',
4 'django.contrib.contenttypes',
5 'django.contrib.sessions',
6 'django.contrib.messages',
7 'django.contrib.staticfiles',
8 'booktest', # 我们添加的应用
9 ]
数据库使用默认的sqlite
2、生成迁移文件:根据模型类型生成sql语句
> python manager.py makemigrations
结果如下所示:
3、执行迁移:执行sql语句生成数据表
> python manager.py migrate
四、测试数据库操作:进入django的shell进行测试
> python manager.py shell
1、添加记录,并查看
五、定义视图
这里为了方便处理,在booktest应用下新建了一个urls.py文件,方便管理
1、Route配置
setting.py文件如下:
ROOT_URLCONF = 'test1.urls'
test1/urls.py文件如下:
1 from django.conf.urls import url, include
2 from django.contrib import admin
3
4
5 urlpatterns = [
6 url(r'^admin/', admin.site.urls),
7 # 使用应用的urls
8 url(r'^', include('booktest.urls'))
9 ]
urls.py文件,编辑如下:
1 from django.conf.urls import url
2 from . import views
3
4 urlpatterns = [
5 # 首页的处理方法
6 url(r'^$', views.index)
7 ]
booktest/views.py
1 from django.http import *
2
3
4 def index(request):
5 # 打印 字符串
6 return HttpResponse("Hello Django")
3、测试视图,结果如下
六、定义模板(这里仅仅对模板进行展示,更多模板操作,可查阅官方文档)
index.html文件:
2、 修改settings.py文件,编辑如下:
'DIRS': [os.path.join(BASE_DIR, 'templates')], # 修改目录
3、修改视图文件 views.py
1 from django.shortcuts import render
2 from django.http import *
3 from django.template import RequestContext, loader
4
5
6 def index(request):
7 # # 加载模板 render() 渲染模板
8 # tmp = loader.get_template('booktest/index.html')
9 # return HttpResponse(tmp.render())
10 return render(request, 'booktest/index.html')
4、测试,刷新页面
附录一:使用Django提供管理站点,对数据库进行管理
1、创建管理用户
> python manager.py createsuperuser
按照要求输入账号、邮箱、密码
2、打开网页,登录
127.0.0.1:8000/admin
进入管理站点,默认可以对groups、users进行管理,如下:
3、管理界面本地化(显示为中文、修改时区)
修改配置文件settings.py 如下:
1 # LANGUAGE_CODE = 'en-us'
2 LANGUAGE_CODE = 'zh-hans'
3
4 # TIME_ZONE = 'UTC'
5 TIME_ZONE = 'Asia/Shanghai'
语言代码与版本有关:1.8之后使用“zh-hans”,之前是“zh-cn”
4、自定义管理界面
Django提供了admin.ModelAdmin类,来定义模型在Admin界面显示的方式
admin.py文件如下:
1 from django.contrib import admin
2 from .models import *
3
4
5 # 如果需要通过/admin进行管理,需要进行注册
6 admin.site.register(BookInfo)
7 admin.site.register(HeroInfo)
admin.py:
1 from django.contrib import admin
2 from .models import *
3
4
5 class HeroInfoInline(admin.TabularInline):
6 """
7 关联对象注册
8 可以继承的父类:
9 1-层叠显示:admin.TabularInline
10 2-表格显示:admin.StackedInline
11 """
12 model = HeroInfo
13 extra = 3
14
15
16 class BookInoAdmin(admin.ModelAdmin):
17 # 1、列表页属性
18 # 显示字段:可以点击列头进行排序
19 list_display = ['id', 'btitle', 'bpub_data']
20 # 过滤字段:过滤框会出现在右侧
21 list_filter = ['btitle']
22 # 搜索字段:搜索框会出现在上侧
23 search_fields = ['btitle']
24 # 分页:分页框会出现在下侧
25 list_per_page = 10
26
27 # 2、修改、添加页属性
28 # 属性分组
29 fieldsets = [
30 ('base', {'fields': ['btitle']}),
31 ('super', {'fields': ['bpub_data']})
32 ]
33 # 关联的对象
34 inlines = [HeroInfoInline]
35
36
37 class HeroInfoAdmin(admin.ModelAdmin):
38 # 显示字段:可以点击列头进行排序
39 list_display = ['id', 'hname', 'gender', 'hcontent']
40
41
42 # 如果需要通过/admin进行管理,需要进行注册
43 admin.site.register(BookInfo, BookInoAdmin)
44 admin.site.register(HeroInfo, HeroInfoAdmin)
list_xxx
下图为修改、新增页面:对属性进行分组,对应上面代码的BookInfoAdmin的 fieldsets字段
5、管理对象的注册
admin.py文件如下:
6、布尔值显示
models.py文件如下
修改models.py文件