创建数据库

进入数据库(系统权限cmd)

mysql -u root -p
create DATABASE Django1;

配置数据库

首先在__init__.py下添加以下代码:

import pymysql
pymysql.install_as_MySQLdb()

_settings\_.py下修改以下代码:

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 数据库名,
'USER': ,
'PASSWORD': ,
'HOST': 'localhost', #数据库服务器ip
'PORT': ‘3306’,
}
}

创建应用

进入django项目目录

python manage.py startapp myapp

目录说明:

admin.py:站点配置 models.py:模型 views.py:视图

在settings.py文件中将myapp应用加入到INSTALLED_APPS选项中

定义模型

概述:一个数据表对应一个模型

在myapp下的models.py中创建

from django.db import models

# Create your models here.
#不要写init方法
class Grades(models.Model):
gname = models.CharField(max_length=20)
gdate = models.DateTimeField()
ggirlnum = models.IntegerField()
gboynum = 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()
scontend = models.CharField(max_length=20)
isDelete = models.BooleanField(default=False)
#关联外键
sgrade = models.ForeignKey("Grades") #类名

在数据库中生成数据表

生成迁移文件:在migrations目录下生成一个迁移文件,此时数据库中还没有生成数据表

python manage.py makemigrations

执行迁移:相当于执行mysql语句创建数据表

python manage.py migrate

查看数据表:

use django1
show tables;
desc myapp_grades;

测试数据操作:

python manage.py shell
from myapp.models import Grades,Students
from django.utils import timezone
from datetime import *

数据操作:

Grades.object.all() #类名.object.all()
grade1.gname="pythonname"
...
grade1.save() #保存到数据库
#重写__str__()方法方便查看结果
def __str__(self):
return "%s-%d-%d"%(self.gname,self.ggirlnum,self.gboynum)

#查询某个对象
Grades.object.get(pk=2) #id=2的对象 primary key
#删除对象
grade1.delete()

关联对象

获得关联对象的集合:

#获取python04班级所有学生
#对象名.关联类名小写_set.all()
grades1.students_set.all()

创建对象

stu3=grade1.students_set.create(sname='',...)

需求:在创建班级时直接创建多个学生

class StudentsInfo(admin.TabularInline): #admin.StackedInline 两者只是显示方式不一样
model = Students
extra = 2

#同时在GradeAdmin添加
class GradeAdmin(admin.ModelAdmin):
inlines = [StudentsInfo]

服务器

启动服务器:

python manage.py runserver ip:port #ip可有不写,不写代表本机ip 端口号默认8000

创建用户:

python manage.py createsuperuser
#然后按照提示输入用户名和密码 进入http://127.0.0.1:8000/admin/

汉化:

把settings.py中的LANGUAGE_CODE=’zh_Hans’

TIME_ZONE=’Asia/Shanghai’

管理数据表

修改admin.py

from django.contrib import admin
# Register your models here.
from .models import Grades,Students
#注册
class GradeAdmin(admin.ModelAdmin):
#列表页属性
list_display = ['pk','gname','gdate','ggirl'] #显示的数据字段
list_filter = ['gname'] #过滤字段
search_fields = ['gname'] #搜索字段
list_per_page = 5 #分页

#添加 修改页属性
fields = [] #添加页各字段显示的顺序
fieldsets = [
("num",{"fields":["ggirlnum","gboynum"]}),
("base", {"fields": ["gname","gdate","isDelete"]}),
] #给属性分组 和fields同时使用
admin.site.register(Grades,GradeAdmin)
admin.site.register(Students)

布尔值的显示

class StudentsAdmin(admin.ModelAdmin):
def gender(self): #写完该函数,要将list_display列表中的sgender修改为当前的函数名
if self.sgender:
return "男"
else:
return "女"
gender.short_description = "性别" #修改字段的描述

执行动作问题

#执行动作的位置
actions_on_top = False
actions_on_bottom = True

使用装饰器完成注册

将admin.site.register(Students,StudentsAdmin)注释掉,然后再相应的类上面(这里是Students)添加@admin.register(Students)

定义视图

#views.py
from django.shortcuts import render
# Create your views here.
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello World!")

配置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'^$',views.index) #什么后缀都没有(即http://127.0.0.1:8000) 这里的意思即是对应到views.py中的index函数
]

但此时如果http://127.0.0.1:8000/2会没有对应的响应页面

#myapp\urls.py
#添加对应的后缀匹配
url(r'^(\d+)$',views.detail) #(\d+)的括号是组的概念,用于传递参数num
#views.py
def detail(request,num):
return HttpResponse("detail-%s"%num)

模板的基本使用

概述:模板是html页面,可以根据视图中传递过来的数据进行填充

创建模板目录:

在最外层的project目录下创建templates目录,再在目录下创建对应项目的目录模板(project/templates/myapp)

配置模板路径:

修改settings.py文件下的TEMPLATES

'DIRS': [os.path.join(BASE_DIR,'templates')]

定义视图模板文件:

模板语法:

1.输出值,可以是变量,也可以是对象.属性

2.{%执行代码段%}
<ul>
{%for grade in grades%} //这里被传入了gradesList
<li>
<a href="{{grade.id}}">{{grade.gname}}</a>
</li>
{%endfor%}
</ul>
#views.py
from .models import Grades
def grades(request):
#去模板里取数据
gradesList=Grades.objects.all()
#将数据传递给模板,模板再渲染页面,将渲染好的页面返回浏览器
return render(request,'myapp/grades.html',{"grades":gradesList})

def gradesStudents(request,num):
grade=Grades.objects.get(pk=num)
studentsList=grade.students_set.all()
return render(request,'myapp/students.html',{"students",studentsList})

Shiroha