一、设计表结构

1.班级表结构

表名:grade

字段:班级名称(gname)、成立时间(gdate)、女生总数(ggirlnum)、男生总数(gboynum)、是否删除(isDelete)

2.学生表结构

表名:student

字段:学生姓名(sname)、学生性别(sgender)、学生年龄(sage)、学生简介(scontend)、所属班级(sgrade)、是否删除(isDelete)

二、配置数据库

注意:Django默认使用SQLite数据

在settings.py文件中,通过DATABASES选择进行数据库配置

配置MySQL

python3.x安装的是PyMySQL

#格式
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 数据库名称,
'USER': 用户名,
'PASSWORD':密码,
'HOST':数据库服务器ip,
'PORT':端口,
}
}
#在__init__.py文件中写入两行代码

import pymysql
pymysql.install_as_MySQLdb() #在settings.py中修改Dababases DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'myblog',
'USER': 'root',
'PASSWORD':'mybolg',
'HOST':'localhost',
'PORT':'3306',
}
}

三、创建应用

在一个项目中可以创建多个应用,每个应用都有一个业务处理

打开黑屏终端进入myblog目录下的project目录

#执行命令,myApp是应用名称
python manage.py startapp myApp myApp目录说明:
Admin 站点配置,django为我们提供的后台管理
models.py模型,ORM,写指定的类,通过命令可以创建数据库结构
view.py视图,业务代码
apps配置当前app
migration数据修改表结构
tests 单元测试

1.激活应用

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

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'myApp',#应用名称
]

2.定义模型

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

#在models.py文件中定义模型,引入models
from django.db import models #模型类要继承models.Model类 class Grades(models.Model):
gname = models.CharField(max_length= 20)
gdate = models.DateTimeField()
ggirlnum = models.IntegerField()
gboynum = models.IntegerField()
isDelete = models.BooleanField(default=False)
# def __str__(self):
# return "%s-%d-%d"(self.gname,self.gdate,self.ggirlnum,self.gboynum) 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") #说明:不需要定义主键,在生成时自动添加,并且值为自动增加

3.在数据库中生成数据表

#在migrations目录下生成一个迁移文件,执行命令
python manage.py makemigrations

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

注意:重新迁移文件的时候,需要把已经迁移的文件进行手动删除,同时把数据库也进行删掉

4.执行迁移

#执行迁移,相当于执行sql语句创建数据表
python manage.py migrate

5.测试数据操作

#进入到python shell,执行命令
python manage.py shell #引入包
from myApp.models import Grades,Students
from django.utils import timezone
from datetime import * #查询所有数据
类名.objects.all()
Grades.object.all() #添加数据
#本质:创建一个模型类的对象
>>>grade1=Grades()
>>>grade1.gname="python04"
>>>grade1.gdate=datetime(year=2017,month=7,day=17)
>>>grade1.ggirlnum=3
>>>grade1.gboynum=70
>>>grade1.save() #models.py在grades类中添加一个__str__方法 class Grades(models.Model):
gname = models.CharField(max_length= 20)
gdate = models.DateTimeField()
ggirlnum = models.IntegerField()
gboynum = models.IntegerField()
isDelete = models.BooleanField(default=False)
def __str__(self):
return "%s-%d-%d"(self.gname,self.gdate,self.ggirlnum,self.gboynum) #查看某个对象
类名.objects.get(pk=2)
Grades.objects.get(pk=2) #修改数据
模型对象.属性=新值
grade2.gboynum=60
grade2.save() #删除数据
模型对象.delete()
grade2.delete() #注意:物理删除,数据库中的表里的数据被删除了
#关联对象 >>>stu = Students()
>>>stu.sname ="薛艳梅"
>>>stu.sgender=False
>>>stu.sage =20
>>>stu.scontend="我叫薛艳梅"
>>>stu.sgrade=grade1
>>>stu.save() #获得关联对象的集合 #需求:获取python04班级的所有学生
对象名.关联的类名小写_set.all()
grade1.students_set.all() #需求:创建曾大大,属于python04班级stu3=grade1.students_set.create(sname=u'曾大大',sgender=True,scontend=u'我叫曾大大',sage=45) #注意:直接添加到数据库中

6.启动服务器

格式

python manage.py runserver ip:port

ip可以不写,不写的话代表本机ip

端口号默认是8000

python manage.py runserver

说明:这是一个纯python写的轻量级web服务器,仅仅在开发测试中使用个

7.Admin站点管理

内容发布;负责添加、修改、删除内容;公告访问;配置Admin应用

在settings.py文件中的INSTALLED_APPS中添加‘django.contrib.admin’,默认已经是配置好了的

创建管理员用户,执行<python manage.py createsuperuser>,依次输入用户名、邮箱、密码、汉化

#在settiongs.py文件中修改:
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC' LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'
#管理数据表,修改admin.py文件
from .models import Grades,Students #注册
admin.site.register(Grades)
admin.site.register(Students) #自定义管理页面,属性说明,列表页属性:list_display、显示字段:list_filter、过滤字段:search_fields、搜索字段:list_per_page、分页、添加、修改页属性:fields、属性的先后顺序:fieldsets、给属性分组 注意:fields与fieldsets不能同时使用 #关联对象 #需求:在创建一个班级时可以直接添加几个学生 class StudentsInfo(admin.TabularInline): #StackedInline
model = Students
extra =2
class GradeAdmin(admin.ModelAdmin):
inlines = [StudentsInfo] #布尔显示问题 from .models import Grades,Students
#注册
class GradeAdmin(admin.ModelAdmin):
#列表页属性
list_display = ['pk','gname','ggirlnum','gboynum','isDelete']
list_filter = ['gname']
list_per_page = 5
search_fields = [ 'gname']
#添加、修改页属性
fields = ['ggirlnum','gboynum','gname','gdate','isDelete']
fieldsets =[
("num",{"fields":['ggirlnum','gboynum']}),
("base",{"fields":['gname','gdate','isDelete']}),
]
admin.site.register(Grades,GradeAdmin) 执行动作的位置 class StudentsAdmin(admin.ModelAdmin):
def gender(self):
if self.gender():
return "男"
else:
return "女"
#设置页面列的名称
gender.short_description="性别"
list_display =['pk','sname''sage',gender,'scontend','sgrade','isDelete']
list_per_page =10
#执行动作的位置
actions_on_top = False
actions_on_bottom = True
admin.site.register(Students,StudentsAdmin) 使用装饰器完成注册 @admin.register(Students)
class StudentsAdmin(admin.ModelAdmin):
def gender(self):
if self.gender():
return "男"
else:
return "女"
#设置页面列的名称
gender.short_description="性别"
list_display =['pk','sname''sage',gender,'scontend','sgrade','isDelete']
list_per_page =10
#执行动作的位置
actions_on_top = False
actions_on_bottom = True
#admin.site.register(Students,StudentsAdmin) 实例:
1、在settings.py里修改数据库名
2、在settings.py里修改数据库密码
3、删除迁移文件
4、在数据库中创建对应第一步的数据库
5、执行生成迁移文件
6、执行迁移
7、启动服务
8、浏览器测试

四、视图的基本使用

在django中,视图对web请求进行回应,视图接收request对象作为第一个参数,包含了请求的信息.

视图就是一个python函数,在views.py文件中定义

#定义视图

from django.http import HttpResponse
def index(request):
return HttpResponse("sunck is a good man")
def detail(request,id):
return HttpResponse("detail %s"%id)
#修改project1目录下的urls.py文件

from django.conf.urls import url,include
from django.contrib import admin
urlpatterns = [
url('^admin', admin.site.urls),
url('^', include('myApp.urls')),
]
#修改myApp目录下的urls.py文件

from django.conf.urls import url
from . import views
urlpatterns = [
url('^$', views.index),
url('^(\d+)/', views.detail),
]

五、模板的扩展

#写students.html模板

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>学生信息</title>
</head>
<body>
<h1>学生信息列表</h1>
<ul>
{% for student in students %}
<li>{{ student.sname}}--{{ student.scontend }}--{{ student.sgrade }}</li>
{% endfor %}
</ul>
</body>
</html>
#定义视图 from .models import Students
def students(request):
studentsList = Students.objects.all()
return render(request,'myApp/students.html',{"students":studentsList})
#配置url url(r'^students/$', views.students),
#需求:点击班级,显示对应班级的所有学生,定义视图

def gradeStudents(request,num):
#获得对应的班级对象
grade = Grades.objects.get(pk=num)
#获得班级下的所有学生对象列表
studentsList = grade.students_set.all()
return render(request,'myApp/students.html',{"students":studentsList}) #配置url url(r'^grades/(\d+)$',views.gradeStudents)

1.模板的基本使用

概述:模板是html页面,可以根据视图中传递的数据值充值

创建模板目录:在模板目录<templates>下创建对应项目名字的目录,用来存放该项目的模板文件

ps:templates目录也可以放在myApp应用目录下

#配置settings.py文件,设置TEMPLATES的DIRS值

定义一个cla.html模板和一个student.html模板

#语法

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

{%执行代码段%}

2.在view.py中使用模板文件

from . models import classInfo
#显示班级信息
def classlist(request):
#获取所有班级信息
classlist=classInfo.objects.all()
#渲染模板返回页面
return render(request,'myApp/grades.html',{"class":classlist}) #在cla.html模板中添加数据 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>首页</title>
</head>
<body>
<h1>班级列表</h1>
<ul>
{% for cla in classlist %}
<li><a href='#'>{{ cla.cname }}</a></li>
{% endfor %}
</ul>
</body>
</html> from .models import Students
def students(request):
studentsList = Students.objects.all()
return render(request,'myApp/student.html',{"stu":studentsList}) #在student.html模板加载数据 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>学生信息</title>
</head>
<body>
<h1>学生信息列表</h1>
<ul>
{% for student in students %}
<li>{{ student.sname}}--{{ student.scontend }}--{{ student.sgrade }}</li>
{% endfor %}
</ul>
</body>
</html> #在myApp目录下的urls.py文件中配置路由 url(r'^cla/$',views.classlist),
url(r'^students/$',views.studnet),

Django 框架基本操作(二)的更多相关文章

  1. Django框架(二十)-- Django rest_framework-权限组件

    一.权限组件的使用 # 用户信息表 class UserInfo(models.Model): name = models.CharField(max_length=32) # 写choice use ...

  2. Django框架(二)-- 基本配置:app注册、模板配置、静态文件配置、数据库连接配置post和get

    一.app 在Django中,APP可以用以下类比 大学 --------------------项目 计算机学院------------app01 土木学院 ------------ app02 1 ...

  3. Django框架(二十九)—— 跨域问题

    目录 跨域问题 一.同源策略 二.CORS(跨域资源共享) 三.CORS两种请求(简单请求与非简单请求) 1.简单请求(一次请求) 2.非简单请求(两次请求) 四.CORS在Django中的应用 1. ...

  4. Django框架(二十八)—— Django缓存机制

    目录 Django缓存机制 一.什么是缓存 二.Django的6中缓存方式及配置(只需要改配置文件) 1.开发调试缓存(此模式为开发调试使用,实际上不执行任何操作) 2.内存缓存(将缓存内容保存至内存 ...

  5. Django框架(二十七)—— ContentType组件

    目录 ContentType组件 一.什么是ContentType组件 二.使用ContentType 三.使用场景总结 ContentType组件 一.什么是ContentType组件 conten ...

  6. Django框架(二十六)—— Django rest_framework-分页器与版本控制

    目录 分页器与版本控制 一.三种分页器 二.分页器 1.普通分页(PageNumberPagination) 2.偏移分页(LimitOffsetPagination) 3.加密分页(CursorPa ...

  7. Django框架(二十一)—— Django rest_framework-权限组件

    目录 Django rest_framework-权限组件 一.权限组件的使用 1.使用语法 2.全局使用.局部使用.局部禁用权限 二.源码分析 1.Book中没有as_view 2.APIView的 ...

  8. Django框架(二十)—— Django rest_framework-认证组件

    目录 Django rest_framework-认证组件 一.什么是认证 二.利用token记录认证过的用户 1.什么是token 2.token的原理 3.cookie.session.token ...

  9. Django框架(二)—— 基本配置:app注册、模板配置、静态文件配置、数据库连接配置post和get

    目录 app注册.模板配置.静态文件配置.数据库连接配置post和get 一.app 二.模板配置 三.静态文件配置 四.数据库连接配置 五.get请求和post请求 六.新手三件套 七.登录功能案例 ...

随机推荐

  1. 关于layui图片/文件上传

    一:常规使用   普通文件上传 (传入服务器一张图片) 1.前台代码: <!DOCTYPE html><html><head> <meta charset=& ...

  2. 弹性盒模型flex-grow的计算

    flex-grow属性是弹性盒布局模块的子属性. 它定义了弹性项目在必要时增长的能力. 它接受作为比例的无单位值. 它决定了项目应在伸缩容器内部占用多少可用空间. 例如,如果所有项目的flex-gro ...

  3. martini-拓扑映射

    如何为一个新的分子创建拓扑文件? 这是martini应用的关键.http://jerkwin.github.io/2016/08/31/Martini%E5%B8%B8%E8%A7%81%E9%97% ...

  4. tcp syn-synack-ack 服务端发送syn-ack

    tcp_v4_send_synack()用于发送SYNACK段,在tcp_v4_conn_request()中被调用. 首先调用tcp_make_synack()构造SYNACK段,主要是构造TCP报 ...

  5. CorelDRAW极具创意的多边形工具

    这是一个简单的教程,它展示了使用三种基本的CorelDRAW工具打造的创意性成果:多边形工具.挑选工具和形状工具. CorelDRAW 可让您以非常直观的方式创建多边形.尽管多边形工具乍看起来并不像一 ...

  6. 怎么用思维导图软件iMindMap整理发文思路

    如果你是一个普通的博客作者,那么你就应该明白在枯竭时寻找灵感就像是一场噩梦,即使你有一千个想法,但是你无法将它们关联起来也是无用的,所以,为什么不试试iMindMap思维导图呢,尝试创新,进行组建,你 ...

  7. Mac电脑数据被误删了怎么办,还能恢复吗

    随着苹果产品的使用率越来越高,苹果电脑视频丢失的风险也是居高不下,大部分情况下都是由于误操作或者是中病毒导致视频丢失,苹果电脑视频恢复可以实现吗?涉及到文件恢复的问题,找EasyRecovery文件恢 ...

  8. guitar pro 系列教程(十一):Guitar Pro菜单工具之MIDI效果的提升

    对于新手的一些朋友,看谱,编曲时使用Guitar Pro时,因为对其功能不是很了解而显得困难重重,导致出现的音频效果不是很理想,因此,小编今天要做的便是,单独把Guitar Pro里的MIDI效果如果 ...

  9. 「CSP-S 2019」格雷码

    [题目描述] 传送门 [题解] 题目中已经清楚地告诉你怎么用n位格雷码推n+1位格雷码, 直接二叉树模拟即可 注意要使用unsigned long long(如果这道题没有95分部分分,不知道有多少人 ...

  10. yii2-imagine的使用

    <?php /** * 图片常用处理 * * 需要 yii/yii2-imagine 的支持 * php composer.phar require --prefer-dist yiisoft/ ...