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请求 六.新手三件套 七.登录功能案例 ...
随机推荐
- MySQL全面瓦解11:子查询和组合查询
概述 子查询是SQL查询中的重要一块,是我们基于多表之间进行数据聚合和判断的一种手段,使得我们的处理复杂数据更加的便捷,这一节我们主要来了解一下子查询. 先做一下数据准备,这边建立三张表:班级.学生. ...
- 极客mysql38
InnoDB 引擎把数据放在主键索引上,其他索引上保存的是主键 id.这种方式,我们称之为索引组织表(Index Organizied Table). 而 Memory 引擎采用的是把数据单独存放,索 ...
- C++的四种强制转型形式:
C++同时提供了四种新的强制转型形式(通常称为新风格的或C++风格的强制转型): const_cast(expression)dynamic_cast(expression)reinterpret_c ...
- 年轻人不讲武德来白piao我这个老同志
朋友们好啊,我是码农小胖哥. 今天有个同学问我在吗,我说什么事? 给我发个截图,我一看!噢,原来是帮忙搞个定时任务,还是动态的. 他说了两种选择,一种是用DelayQueue,一种是用消息队列. 他说 ...
- Python项目1:自动添加标签
本项目取材自<Python基础教程(第三版)>人民邮电出版社 目标: 本项目给纯文本文件添加格式,使文档转换成其他类型的文档(以HTML为例) 思路: 从原文件提取有用信息: 文档结构-- ...
- 在线动态修改ulimit
前言 系统中有些地方会进行资源的限制,其中的一个就是open file的限制,操作系统默认限制的是1024,这个值可以通过各种方式修改,本篇主要讲的是如何在线修改,生产上是不可能随便重启进程的 实践 ...
- 自行实现的jar包中,日志库的适配实现
日常情况下,我们自己都会自行实现一些基础的jar包,如dao包.service包或一些其他完成特定功能的jar包.如果没有一套调试日志信息,出现问题时想查找问题非常不方便.可能大多数小伙伴都会有自 ...
- [web安全原理分析]-XEE漏洞入门
前言 1 前言 XXE漏洞 XXE漏洞全称(XML External Entity Injection)即xml外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致 ...
- DWVA-XSS部分练手闯关
前言 关于XSS基础内容请查看:https://www.cnblogs.com/xhds/p/12239527.html 实验平台采用DWVA v1.10 XSS(Reflected)反射性XSS漏 ...
- bWAPP----HTML Injection - Reflected (GET)
HTML Injection - Reflected (GET) 进入界面, html标签注入 这是核心代码 1 <div id="main"> 2 3 <h1& ...