[python]django的mode设置表结构和serializers序列化数据
框架使用的库版本
python3.6.5
Django-2.0.6
djangorestframework-3.8.2
mysqlclient-1.3.12
1.项目结构声明,数据库在setting.py配置(略)
--TestProject
-----apitest(创建的应用)
-----manage.py(自动生成)
-----TestProject(自动生成)
2.创建model文件
cd /TestProject/apitest
mkdir models #创建model文件夹
cd /models/ #到文件夹下创建model文件
touch login_model.py #创建一个给登录相关接口使用的model
3.login_model.py #编辑文件
添加一个用户表,表名为tbl_user
- # -*- coding: utf-8
- from django.db import models
- # Create your models here.
- # 用户表
- class tbl_user(models.Model):
- user_name = models.TextField(max_length=10)
- email = models.TextField(max_length=50,default='')
- phone=models.CharField(max_length=11,default='')
- password=models.TextField(max_length=30,default='')
- token_value=models.TextField(max_length=100)
- status=models.CharField(max_length=100)
- creat_time = models.DateTimeField()
- # desc排序数据
- class Meta:
- ordering = ['-creat_time']
3.1前面字段名,后面是字段类型以及长度,可以看下https://www.cnblogs.com/lhj588/archive/2012/05/24/2516040.html,感谢这位作者~写的挺详细,也解决了我一些问题,
如下个别加了default='',是因为之前就创建好了这个表,有些字段后加的,所以之前数据设置为空default=''
3.2后面又写了排序,这样是,在写接口时查询数据以desc的排序查
4.创建好这个用户表后,在创建应用的目录下 admin.py注册这个表
- from django.contrib import admin
- from ApiSoftware.modes import login_models
- # Register your models here.
- admin.site.register(login_models.tbl_user)
5.然后用命令把表生成到数据库(命令随版本)
cd 到项目的根目录,就是有manage.py的目录
python manage.py makemigrations
python manage.py migrate
这样表就用不到setting配置的数据库中啦,进数据库时表名会变更为 应用名_tbl_user
6.serializers序列化出数据
首先说下我用serializers的场景,如果写一个查询接口,让接口输出学生表男生的所有个人信息,那么数据必然是多个的,这样需要把每个学生的个人信息存在字典里,多个的话就把多个学生(多个字典存在list中)
serializers关联model
上面我们创建了用户表,这时候创建一个serializers关联model,fields中的字段是指根据查询条件序列化出哪些数据,
- from rest_framework import serializers
- from ApiSoftware.modes.login_models import tbl_user
- class ProductSerializer(serializers.ModelSerializer):
- class Meta:
- model = tbl_user
- fields = ('user_name', 'emal', 'phone')
举个栗子,第一句代码从上面创建的tbl_user表查询出男生的数据,然后再调用上面写的序列化类,取出男学生的user_name,email,phone这些字段值:
- products = test.tbl_user.objects.filter(Sex='男')
- serializer = ProductSerializer(products, many=True)
应用到response中就是把serializers变量传给返回json的某个key的value,如下:
{
"status":"ok"
"user":"[{"user_name":"小明","emal:"123@qq.com","phone":"12345"},{"user_name":"小张","emal:"12344@qq.com","phone":"123456"},{"user_name":"小马","emal:"12344555@qq.com","phone":"12345677"}]"
"message":"查询成功"
}
具体的写接口应用后面一篇介绍呀~ 若有理解不正确的,多多指教~
[python]django的mode设置表结构和serializers序列化数据的更多相关文章
- Python - Django - ORM 多对多表结构的三种方式
多对多的三种方式: ORM 自动创建第三张表 自己创建第三张表, 利用外键分别关联作者和书,关联查询比较麻烦,因为没办法使用 ORM 提供的便利方法 自己创建第三张表,使用 ORM 的 ManyToM ...
- python Django教程 之 模型(数据库)、自定义Field、数据表更改、QuerySet API
python Django教程 之 模型(数据库).自定义Field.数据表更改.QuerySet API 一.Django 模型(数据库) Django 模型是与数据库相关的,与数据库相关的代码 ...
- sqlserver 复制表结构(可以含有数据 或 只要表结构)
sqlserver 复制表结构(可以含有数据 或 只要表结构) SELECT * INTO bb FROM aa(NOLOCK) WHERE 1=0
- python——Django(ORM连表操作)
千呼万唤始出来~~~当当当,终于系统讲了django的ORM操作啦!!!这里记录的是django操作数据库表一对多.多对多的表创建及操作.对于操作,我们只记录连表相关的内容,介绍增加数据和查找数据,因 ...
- Django模型系统——ORM表结构对应关系
对于数据库来说一般表结构只会有三种对应关系,分别是一对一.一对多和多对一,下面分别介绍: 1.一对多 何为一对多,例如一个学生只可能有一个班级,一个班级却又多个学生,班级表和学生表就是一对多的关系. ...
- python 基础 9.6 设计表结构
一. 设计表结构 在操作设计数据库之前,我们先要设计数据库表结构,我们就来分析分析经典的学生,课程,成绩,老师这几者他们之间的关系,我们先来分析各个主体他们直接有什么属性,并确定表结构,在实际开 ...
- django项目一 CRM表结构
from django.db import models from django.contrib import auth from django.core.exceptions import Perm ...
- 【Django】一对多表结构
1.创建project数据库表 INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.co ...
- Linux下开发python django程序(模板设置和载入数据)
1.添加templates文件夹 2.修改settings.py文件 import os #引用 os模块 BASE_DIR = os.path.dirname(os.path.dirname(os. ...
随机推荐
- 『Python』列表生成式、生成器与迭代器
1. 迭代 在 Python中, 迭代是通过 for ... in 来完成的, 而很多语言比如 C 语言, 迭代 list 是通过下标完成的. Python 的 for 循环抽象程度要高于 C 的 f ...
- Hibernate 的 <= 出现问题
问题模拟 select new map( e.name as name , e.salary as salary) from Emplpyee e where e.salary <= :sala ...
- Jenkins持续集成与部署
一.Jenkins简介 在阅读此文章之前,你需要对Linux.Docker.Git有一定的了解和使用,如果还未学习,请阅读我前面发布的相关文章进行学习. 1.概念了解:CI/CD模型 CI全名Cont ...
- Redis基础数据结构-基于2.8
SDS SDS是Redis中String的底层数据结构,数据结构如下,SDS保留了传统的C字符串表达方式即数组的最后一个元素是'/0'结尾.此外还添加了两个字段len和free,其中len表示字符串长 ...
- 几何 三垂模型 及 正方形 及 弦图 及 jio拉jio模型 及 中位线
Q:$AO\bot OB,AO=OB,CO\bot OD,CO=OD,BC\bot EF$ 求证 $E$ 为 $AD$ 中点 A:作如图 $AI\bot IH\bot HD$ $\because AO ...
- 如何在印刷品中使用遵循SIL Open Font License协议的字体
如何在印刷品中使用遵循SIL Open Font License协议的字体 昨天在知乎看到了一个问题,( 如何在设计中声明字体开源许可证? - 知乎 (zhihu.com),恰好最近在研究一些开源协议 ...
- 【转载】如何从零开始开发一款嵌入式产品(20年的嵌入式经验分享学习,来自STM32神舟系列开发板设计师的总结
[好文章值得分享,摘自作者:jesse] 来源:www.armjishu.com作者:jesse转载请注明出处 我的另一篇文章:<STM32嵌入式入门必看之文章-----介绍非常详细!(学STM ...
- 更好的 java 重试框架 sisyphus 配置的 2 种方式介绍
回顾 我们前面学习了 更好的 java 重试框架 sisyphus 入门简介 更好的 java 重试框架 sisyphus 背后的故事 这一节让我们一起学习下 sisyphus 基于函数式的配置和注解 ...
- 错误 Unresolved reference 'AF_INET' 解决办法
错误代码如下: import socketserer_socket = socket.socket(AF_INET, SOCK_DGAM) 错误信息: 原因分析: 1.AF_INET,SOCK_DGA ...
- Hive架构及搭建方式
目录 前言 hive的基础知识 基本架构 metastore 内嵌服务和数据库 内嵌服务 服务和数据库单独部署 hcatalog 客户端 客户端的本地模式 beeline beeline的自动模式 j ...