Django 框架基本操作(二)
一、设计表结构
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 框架基本操作(二)的更多相关文章
- Django框架(二十)-- Django rest_framework-权限组件
一.权限组件的使用 # 用户信息表 class UserInfo(models.Model): name = models.CharField(max_length=32) # 写choice use ...
- Django框架(二)-- 基本配置:app注册、模板配置、静态文件配置、数据库连接配置post和get
一.app 在Django中,APP可以用以下类比 大学 --------------------项目 计算机学院------------app01 土木学院 ------------ app02 1 ...
- Django框架(二十九)—— 跨域问题
目录 跨域问题 一.同源策略 二.CORS(跨域资源共享) 三.CORS两种请求(简单请求与非简单请求) 1.简单请求(一次请求) 2.非简单请求(两次请求) 四.CORS在Django中的应用 1. ...
- Django框架(二十八)—— Django缓存机制
目录 Django缓存机制 一.什么是缓存 二.Django的6中缓存方式及配置(只需要改配置文件) 1.开发调试缓存(此模式为开发调试使用,实际上不执行任何操作) 2.内存缓存(将缓存内容保存至内存 ...
- Django框架(二十七)—— ContentType组件
目录 ContentType组件 一.什么是ContentType组件 二.使用ContentType 三.使用场景总结 ContentType组件 一.什么是ContentType组件 conten ...
- Django框架(二十六)—— Django rest_framework-分页器与版本控制
目录 分页器与版本控制 一.三种分页器 二.分页器 1.普通分页(PageNumberPagination) 2.偏移分页(LimitOffsetPagination) 3.加密分页(CursorPa ...
- Django框架(二十一)—— Django rest_framework-权限组件
目录 Django rest_framework-权限组件 一.权限组件的使用 1.使用语法 2.全局使用.局部使用.局部禁用权限 二.源码分析 1.Book中没有as_view 2.APIView的 ...
- Django框架(二十)—— Django rest_framework-认证组件
目录 Django rest_framework-认证组件 一.什么是认证 二.利用token记录认证过的用户 1.什么是token 2.token的原理 3.cookie.session.token ...
- Django框架(二)—— 基本配置:app注册、模板配置、静态文件配置、数据库连接配置post和get
目录 app注册.模板配置.静态文件配置.数据库连接配置post和get 一.app 二.模板配置 三.静态文件配置 四.数据库连接配置 五.get请求和post请求 六.新手三件套 七.登录功能案例 ...
随机推荐
- 使用LSV进行通视分析教程
在LSV"分析"菜单栏中点击"通视分析" 在地面或者建筑物表面选择一点,然后鼠标移动到另一个位置点击结束,即可判断出两点间是否有障碍物,是否可见.通视分析结果显 ...
- App与小程序对接
背景: 商品详情页,点击分享,分享到微信好友,点开链接App拉起小程序. 用户在小程序浏览完成,跳转至原App购买商品. 功能点: 实现APP与小程序互调. 前提: 已对接好友盟ShareSDK(需要 ...
- Linux踩坑之云服务器 ssh 连接不上
前奏:今天没事处理一下之前远程不了Linux桌面的问题时,找到一个解决方法(开始入坑): systemctl set-default graphical.tar ...
- 微服务通信之feign的配置隔离
前言 由上文我们知道针对某一个Feign接口,我们可以给他设置特定的配置类.那如果现在有一个服务,我们只想对A服务配置一个拦截器拦截请求而不影响其他服务,那应该怎么做呢? 一.feign接口配置 由前 ...
- 手写一个最迷你的Web服务器
今天我们就仿照Tomcat服务器来手写一个最简单最迷你版的web服务器,仅供学习交流. 1. 在你windows系统盘的F盘下,创建一个文件夹webroot,用来存放前端代码. 2. 代码介绍: ( ...
- modprobe: FATAL: Module ceph not found解决办法
问题 有可能你在进行 Ceph 文件系统挂载的时候出现下面的提示: modprobe: FATAL: Module ceph not found. mount.ceph: modprobe faile ...
- HDU100题简要题解(2080~2089)
//2089之前忘做了,周二C语言课上做,至于2086,写题解的时候突然发现之前的做法是错的,新的解法交上去CE,等周二再弄吧,其余题目暂时可以放心 HDU2080 夹角有多大II 题目链接 Prob ...
- JVM简单入门
目录 初识JVM 双亲委派机制 沙箱安全机制 Native PC计数器 方法区 栈 堆 工具分析OOM GC算法 GC算法总结 JMM 初识JVM JVM的位置:jre中包含jvm. 双亲委派机制 双 ...
- PHP代码审计入门(SQL注入漏洞挖掘基础)
SQL注入漏洞 SQL注入经常出现在登陆页面.和获取HTTP头(user-agent/client-ip等).订单处理等地方,因为这几个地方是业务相对复杂的,登陆页面的注入现在来说大多数是发生在HTT ...
- 【深度分析】:阿里,腾讯面试题 SpringBoot整合Spring MVC
Java学习总结 SpringBoot整合Spring MVC 1.SpringMVC概述 MVC(Model–view–controller)是软件工程中的一种软件架构模式,基于此模式把软件系统分为 ...