所谓对象关系映射,就是将数据库的一些名字与python中的一些名字相对应,表名-->类名,字段-->属性,操作(增删改查)-->方法。这样,我们就可以通过对Python代码的编辑来对数据库进行操作。

流程:创建models,通过models创建迁移文件(makemigrations),通过迁移文件映射到数据库中。

book/models.py

from django.db import models

# Create your models here.
class Student(models.Model):
#字段映射,数据库中是male,female,后台显示的是男,女
choices={
('male',"男"),
('female','女'),
}
#创建数据库中的字段
name=models.CharField(verbose_name='姓名',max_length=20,unique=True)
age=models.CharField(verbose_name='年龄',max_length=10)
gender=models.CharField(verbose_name='性别',max_length=10,choices=choices,default='male')
is_deleted=models.BooleanField(default=False)
introduce=models.TextField() def __str__(self):
return self.name class Meta:
# verbose_name_plural='新闻'
# verbose_name="新闻列表"
#修改排列的顺序,这句是靠id从大到小排序
ordering=['-id']
db_table = 'student'

book/admin.py

from django.contrib import admin
from .models import Student # Register your models here. #在后台显示相关信息
class StudentAdmin(admin.ModelAdmin):
list_display = ['id','name','age','gender','is_deleted','introduce'] #将模型进行注册
admin.site.register(Student,StudentAdmin)

有了这两个,输入:

python manage.py makemigrations

python manage.py migrate

会在migrations下生成一个文件:

具体内容如下:

from django.db import migrations, models

class Migration(migrations.Migration):

    dependencies = [
('book', '0001_initial'),
] operations = [
migrations.CreateModel(
name='Student',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=20, unique=True, verbose_name='姓名')),
('age', models.CharField(max_length=10, verbose_name='年龄')),
('gender', models.CharField(choices=[('male', '男'), ('femal', '女')], max_length=10, verbose_name='性别')),
('is_deleted', models.BooleanField(default=False)),
('introduce', models.TextField()),
],
),
migrations.DeleteModel(
name='Articles',
),
]

我们要进入后台管理界面需要设置用户名和密码:

python manage.py createsuperuser

输入用户:admin 密码:12345678 邮箱可以不填

浏览器输入127.0.0.1:8000/admin,输入账号密码后进入到管理界面,

点击students,会有相应表的信息:

最后,我们将数据库里面的内容传到前台页面:

book/views.py

from .models import Student
from django.shortcuts import render
def index(request):
student_list=Student.objects.all()
context={
'students':student_list,
}
return render(request,"index.html",context=context)

index.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{{title}}</title>
<link rel="stylesheet" href={% static 'css/index.css' %}>
</head>
<body>
{% include 'header.html'%}
<div class="content">
<h1>这是主界面</h1>
{% for student in students %}
{{student.id}}
{{student.name}}
{% endfor %}
<!--{% block content %}-->
<!--{% endblock %}-->
</div>
{% include 'footer.html'%}
</body>
</html>

最终效果:

django-模型之(ORM)对象关系映射(一)的更多相关文章

  1. Django---静态文件配置,post提交表单的csrf问题(日后细说),创建app子项目和分析其目录,ORM对象关系映射简介,Django操作orm(重点)

    Django---静态文件配置,post提交表单的csrf问题(日后细说),创建app子项目和分析其目录,ORM对象关系映射简介,Django操作orm(重点) 一丶Django的静态文件配置 #we ...

  2. ORM 对象关系映射

    ORM (object relation mapping) 就是将对象数据转换为sql语句并执行 对象关系映射框架 orm 需要做的事情 1 生成创建表的语句 2 插入数据的语句 3 删除数据的语句 ...

  3. $Django setting.py配置 ,GET、POST深入理解,三件套,orm对象关系映射简介

    1 django中app的概念: 大学:----------------- 项目  信息学院 ----------app01  物理学院-----------app02 ****强调***:创建的每一 ...

  4. Php ORM 对象关系映射

    ORM的全称是Object Relational Mapping,即对象关系映射.它的实质就是将关系数据(库)中的业务数据用对象的形式表示出来,并通过面向对象(Object-Oriented)的方式将 ...

  5. ORM对象关系映射

    ORM 总结: ORM:对象关系映射 作用: 1.将定义数据库模型类--> 数据库表 2.将定义数据库模型类中的属性--->数据库表字段 3.将模型对象的操作(add,delete,com ...

  6. Java 自定义注解实现ORM对象关系映射

    一,ORM概念 ORM即Object Relation Mapping,Object就是对象,Relation就是关系数据库,Mapping映射,就是说Java中的对象和关系数据库中的表存在一种对应关 ...

  7. ORM对象关系映射之GreenDAO源码解析

    上一篇我们学习了GreenDAO的CRUD基本操作,可以说是非常的方便的,而且GreenDAO的效率和性能远远高于其它两款流行的ORM框架,下面是我从官网找的一副它们三个ORM框架之间的性能测试的直观 ...

  8. Python Web框架篇:Django Model ORM(对象关系映射)

    一,基本操作 用于实现面向对象编程语言里不同类型系统的数据之间的转换,换言之,就是用面向对象的方式去操作数据库的创建表以及增删改查等操作. 1.增(create , save): from app01 ...

  9. web前端基础知识-(八)Django进阶之数据库对象关系映射

    Django ORM基本配置 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去 ...

随机推荐

  1. CF #579 (Div. 3) C.Common Divisors

    C.Common Divisors time limit per test2 seconds memory limit per test256 megabytes inputstandard inpu ...

  2. HTML5-常用正则表达式

    有关H5正则表达式的一些常用式子,希望热爱编程的同学们多多指教,还有也希望可以关注收藏本站哦!❤^_^❤ 一.校验数字的表达式 1. 数字:^[0-9]*$ 2. n位的数字:^\d{n}$ 3. 至 ...

  3. 07-简单认识margin

    margin 外边距,表示边框到最近盒子的距离. 对于左右两边 <!DOCTYPE html> <html lang="en"> <head> ...

  4. 大家久等了,改造版阿里巴巴 sentinel 控制台终于开源了

    前言 最近几天,好几个小伙伴在后台询问,改造后的 sentinel-dashboard 什么时候开源.讲真,不是不想给大家放出来,是因为一些地方还没有完善好,怕误导了大家,在经过了一个星期业余时间的努 ...

  5. JavaScript 类型 检测

    前言 ECMAScript中有5种数据类型,分别为Number,Boolean,Null,Undifined和String,以及一种复杂的数据类型Object(由名值对组成,是这门语言所有对象的基础类 ...

  6. React antd如何实现<Upload>组件上传附件再次上传已清除附件缓存问题。

    最近在公司做React+antd的项目,遇到一个上传组件的问题,即上传附件成功后,文件展示处仍然还有之前上传附件的缓存信息,需要解决的问题是,要把上一次上传的附件缓存在上传成功或者取消后,可以进行清除 ...

  7. day 20作业

    目录 1.下面这段代码的输出结果将是什么?请解释. 2.多重继承的执行顺序,请解答以下输出结果是什么?并解释. 3.什么是新式类,什么是经典类,二者有什么区别?什么是深度优先,什么是广度优先? 4.用 ...

  8. 6.InfluxDB-InfluxQL基础语法教程--GROUP BY子句

    本文翻译自官网,官网地址:(https://docs.influxdata.com/influxdb/v1.7/query_language/data_exploration/) GROUP BY子句 ...

  9. VMware虚拟机的三种网络管理模式

      VMware提供了三种网络工作模式:Bridged(桥接模式).NAT(网络地址转换模式).Host-Only(仅主机模式). 打开VM虚拟机,在选项栏“编辑”->“虚拟网络编辑器”中看到V ...

  10. Vue-CLI项目路由案例汇总

    0901自我总结 Vue-CLI项目路由案例汇总 router.js import Vue from 'vue' import Router from 'vue-router' import Cour ...