一、设计表结构

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. HBuilderX SVN地址更改(SVN服务器IP地址变更)

    HBuilderX编辑器中无法修改SVN地址,需要手动在SVN工具中修改 修改步骤: 1.右键编辑器中的SVN项目,选择打开文件所在目录 2.目录中空白处右键,选择TortoiseSVN --> ...

  2. SQL SERVER数据库Left Join用法

    Left Join基本语法: SQL LEFT JOIN 关键字 LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的 ...

  3. spring cloud gateway 启动报错,Failed to bind on [0.0.0.0:xxx] bind(..) failed: 权限不够

    最近把操作系统迁移到了deepin,不得不说Linux中需要学习的还是有很多的,本地启动网关的时候就遇到一个坑,特此记录一下,报错信息. Caused by: reactor.netty.Channe ...

  4. webpack 无法打包:No configuration file found and no output filename configured via CLI option

    报错内容 No configuration file found and no output filename configured via CLI option.A configuration fi ...

  5. 企业级工作流解决方案(九)--微服务Tcp消息传输模型之客户端处理

    客户端启动 客户端启动主要做三件事情,1. 从配置文件读取服务调用配置,存储到全局对象中.2. 指定客户端编解码器工厂.3. 预连接,即预先建立与服务端的通信Chanel. [DependsOn(ty ...

  6. Springboot 框架整理,建议做开发的都看看,整理的比较详细!

    什么是 Spring Boot? SpringBoot是Spring项目中的一个子工程,与我们所熟知的Spring-framework 同属于spring的产品,是用来简化 spring 初始搭建和开 ...

  7. 去年去阿里面试,面试官居然问我Java类和对象,我是这样回答的!

    1.谈谈你对Java面向对象的理解? 面向对象就是把构成问题的事务分解成一个个对象,建立对象的目的不是一个步骤,而是为了描述一个事务在解决问题中的行为.类是面向对象的一个重要概念,类是很多个具有相同属 ...

  8. 如何在FL Studio中使用自动剪辑(上)

    一.什么是FL Studio Automation FL Studio automation可以通过许多不同的方法实现.一种方法是使用自动化剪辑(automation clip).自动化剪辑(或包络线 ...

  9. SQL相关子查询是什么?和嵌套子查询有什么区别?

    目录 两者的各种叫法 相关子查询MySQL解释 相关子查询Wikipedia解释 相关子查询执行步骤拆解 相关子查询和嵌套查询的区别 参考资料 两者的各种叫法 相关子查询叫做:Correlated S ...

  10. So Easy! HDU - 4565

    易知,有\(S_n = \lceil{a + \sqrt{b}}\rceil ^ n\) \(\because a ^ 2 - 1 < b < a ^ 2\) \(\therefore a ...