一、设计表结构

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. Docker - 解决运行容器报 WARNING: IPv4 forwarding is disabled. Networking will not work. 的问题

    问题背景 执行运行容器的命令 docker run -d -uroot -p 8080:8080 --name jenkins2 -v /var/jenkins_node/:/var/jenkins_ ...

  2. Jenkins - 部署在Tomcat容器里的Jenkins,提示“反向代理设置有误”

    提示"反向代理设置有误"的背景 将jenkins.war放在tomcat容器中运行 访问Jenkins-系统管理,会提示"反向代理设置有误" 如何解决 在tom ...

  3. javascript函数式编程基础随笔

    JavaScript 作为一种典型的多范式编程语言,这两年随着React\vue的火热,函数式编程的概念也开始流行起来,lodashJS.folktale等多种开源库都使用了函数式的特性. 一.认识函 ...

  4. 一看就懂的MySQL的FreeList机制

    Hi,大家好!我是白日梦! 今天我要跟你分享的MySQL话题是:"了解InnoDB的FreeList吗?谈谈看!" 本文是MySQL专题的第 7 篇,共110篇. 一.回顾 前面几 ...

  5. Flink SQL Client综合实战

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  6. Spring源码之FactoryBean的实现

    https://zhuanlan.zhihu.com/p/97005407 https://blog.csdn.net/qq_35634181/article/details/104507465 总结 ...

  7. linux文件描述符、软硬连接、输入输出重定向

    引用链接:https://blog.csdn.net/qq769651718/article/details/79459346 文件描述符的作用: 文件描述符是linux操作系统中特有的概念.其相当于 ...

  8. 查询osd上的pg数

    本文中的命令的第一版来源于国外的一个博客,后面的版本为我自己修改的版本 查询的命令如下: ceph pg dump | awk ' /^pg_stat/ { col=1; while($col!=&q ...

  9. Win7 安装 Docker 踩的那些坑

    公司电脑是 WIN7 x64 旗舰版 SP1,安装 Docker 时踩了好多雷,分享出来给大家排排雷. 首先,Docker Desktop Installer 的 Windows 版只支持 Win10 ...

  10. Java中常量池详解

    在Java的内存分配中,总共3种常量池: 转发链接:https://blog.csdn.net/zm13007310400/article/details/77534349 1.字符串常量池(Stri ...