创建项目
- 命令 django-admin startproject test1
进入 test1目录,目录结构如下
目录说明
- mange.py:一个命令行工具,可以使你用多种方式对Django项目进行交互
- init.py:一个空文件,它告诉python这个内层的与项目重名的test1目录应该看做一个python包
- setting.py:项目的配置
- urls.py:项目的url声明
- wsgi.py:项目与wsgi兼容的web服务器入口
设计模型
设计介绍
- 本示例完成“图书-英雄”信息的维护,需要存储两种数据:图书,英雄
- 图书表结构的设计:
- 表名:BookInfo
- 图书名称:btitle
- 图书发布时间:bpub_date
- 英雄表结构的设计:
- 表名:HeroInfo
- 英雄名:hname
- 英雄性别:hgender
- 英雄简介:hcontent
- 所属图书:hbook
- 图书-英雄的关系为一对多
数据库配置
- 在settings.py文件中,通过DATABASE项进行数据库设置
- jango支持的数据库包括sqlite,mysql等,默认的为sqlite
创建应用
- 在一个项目中可以创建一到多个应用,每个应用进行一种业务处理
创建应用的命令
python mange.py startapp booktest
应用的目录结构如下:
定义模型类
- 有一个数据表,就对应一个模型类
- 打开models.py,定义模型类
from django.db import models
class BookInfo(models.Model):
btitle = models.CharField(max_length=20)
bpub_date = models.DateTimeField()
def __str__(self):
# 当输出对象时,会调用str方法
return "%d" % self.pk
class HeroInfo(models.Model):
hname = models.CharField(max_length=20)
hgender = models.BooleanField()
bcontent = models.CharField(max_length=100)
hBook = models.ForeignKey('BookInfo')
def __str__(self):
return "%d" % self.pk
生成数据表
激活模型:编辑settings.py文件,将booktest应用加入到installed_app中
生成迁移文件:根据模型类生成sql语句
python mange.py makemigrations
- 迁移文件被生成到应用的migrations目录
- 执行迁移:执行sql语句生成数据表
python manage.py migrate
服务器
运行如下命令即可开启服务器
python mange.py ruanserver ip:port
可以不写ip,端口默认为8000
第一次打开开发版服务器是这个样子
后台管理
使用django的管理
- 创建一个管理员用户
python manage.py createsuperuser ,按提示输入相关信息
- 启动服务器,即可通过“127.0.0.1/admin”进入后台
向admin注册booktest模型
- 打开booktest/admin.py文件,注册模型
from django.contrib import admin from .models import BookInfo,HeroInfo admin.site.register(BookInfo) admin.site.register(HeroInfo)
这样,就可以在/admin站点中对模型的属性进行增删改查等操作
自定义管理页面
- Django提供了admin.ModelAdmin类
- 通过定义ModelAdmin的子类,可以定义模型在Admin界面的显示方式
class QuestionAdmin(admin.ModelAdmin): ... admin.site.register(Question,QuestionAdmin)
列表页属性
list_display:显示字段,可以列头进行排序
list_display = [‘pk’,’btitle’,’bpub_date’]
list_filter:过滤字段,过滤框会出现在右侧
lister_filter = [‘btitle’]
search_fields:搜索字段,搜索框会出现在上侧
search_fields = [‘btitle’]
list_per_page: 分页,分页框会出现在下侧
list_per_page =10
添加,修改页属性
fields:属性的先后顺序
fields = [‘bpub_date’,btitle]
fieldsets:属性分组
fieldsets = [ ('basic',{'fields':['btitle']}), ('more',{'fields':['bpub_date']}), ]
视图
- 在django中,视图对web请求进行回应
- 视图接受request对象作为第一个参数,包含了请求的信息
- 视图就是一个Python函数,被定义在view.py中
# coding=utf-8 # from django.shortcuts import render from django.http import HttpResponse def index(request): return HttpResponse('index') def detail(request,id): return HttpResponse("detail %s" % id)
定义完视图后,需要配置urlconf,否则无法处理请求
URLconf
- 在Django中,urlconf包括正则表达式和视图函数名两个元素,web发出的请求会利用正则与其匹配,进入相应的view函数
- 在test1/urls.py插入booktest,使主urlconf连接到booktest.urls模块
url(r’^’,include(‘booktest.urls’))
.在booktest中的url.py中添加urlconffrom django.conf.urls import url from . import views urlpatterns = [ url(r'^$',view.index), url(r'^([0-9]+)/$',views.detail), ]
模板
- 模板是html页面,可以根据视图中传递的数据填充值
- 创建模板的目录如下图
- 修改settings.py文件,设置TEMPLATES值
‘DIRS’: [os.path.join(BASE_DIR,’templates’)],
Render简写
- Django提供了函数Render()简化视图调用模板构造上下文
# coding=utf-8 from django.shortcuts import render from .models import BookInfo def index(request): booklist = BookInfo.objects.all() return render(request,'booktest/index.html',{'booklist':booklist}) def detail(request,id): book = BookInfo.objects.get(pk=id) return render(request,'booktest/detail.html',{'book':book})