首页>>后端>>Python->django嵌套序列化怎么导入(Django序列化)

django嵌套序列化怎么导入(Django序列化)

时间:2023-12-06 本站 点击:0

导读:很多朋友问到关于django嵌套序列化怎么导入的相关问题,本文首席CTO笔记就来为大家做个详细解答,供大家参考,希望对大家有所帮助!一起来看看吧!

Django REST framework框架之GET, POST, PUT, PATCH, DELETE等API请求接口设计

一、API接口功能需求:设计一些接口URL,让前端/客户请求这个URL去获取数据并显示,更改数据(增删改查),达到前后端分离的效果

二、设计逻辑:通过http协议请求方式GET、POST、PUT、PATCH、DELETE设计符合RESTful规范的api接口也就是URL

三、简易源码:

3.序列化serializers

#导入模型类和rest_framework序列化模块serializers

from .models import Article

from rest_framework import serializers

#定义序列化类,使用继承ModelSerializer方法

class ArticleSerializer(serializers.ModelSerializer):

class Meta:

model = Article #指定序列化的模型类

fields = '_ all _' #选取序列化字段,此处可自行选取字段

4.视图函数views

from django.http import HttpResponse

from django.views.decorators.csrf import csrf_exempt

from .models import Article

from .serializers import ArticleSerializer

from rest_framework.renderers import JSONRenderer

from rest_framework.parsers import JSONParser

#调用csrf装饰器csrf_exempt模块,解决跨域访问问题

#JSONRenderer它将Python的dict转换为JSON返回给客户端

#JSONParser 负责将请求接收的JSON数据转换为dict

#写法一

#在需要跨域的视图上调用装饰器@csrf_exempt

@csrf_exempt

def article_list(request):

if request.method == 'GET':

arts = Article.objects.all() #获取模型类数据

ser = ArticleSerializer(instance=arts,many=True) #序列化数据instance

#下一步用rest_framework方法里的JSONRenderer方法渲染数据

json_data = JSONRenderer().render(ser.data)

return HttpResponse(json_data,content_type='application/json',status=200)

#写法二

class JSONResponse(HttpResponse):

def _ init (self,data,**kwargs):

content = JSONRenderer().render(data)

kwargs['content_type'] = 'application/json'

super(JSONResponse, self)._ init (content,**kwargs)

#根据id进行增删改操作接口

@csrf_exempt

def article_detail(request,id):

try:

art = Article.objects.get(id=id)

except Article.DoesNotExist as e:

return HttpResponse(status=404)

备注:

*写法二中定义JSONResponse类将返回的数据data与content_type返回类型做了封装

*API接口

GET/POST

GET/PUT/PATCH/DELETE

*Postman测试效果图

9、Django视图(View与APIView)

django中编辑视图views.py有两种方式,一种是基于类的实现,另外一种是函数式的实现方式,两种方法都可以用。

REST框架提供了一个APIView类,它是Django View类的子类。

View是Django默认的视图基类,APIView是REST framework提供的所有视图的基类, 继承自Django的View,对Django中的View进行了拓展,具备了认证、授权、限流、不同请求数据的解析的功能。

a.统一使用Request对象.data属性去获取json格式的参数、form表单参数、FILES

b、使用Request对象.query_params来获取查询字符串参数

c、Django支持的参数获取方式,DRF都支持

a.对Django中的HttpResponse进行了拓展

b.实现了根据请求头中Accept参数来动态返回

c.默认情况下,如果不传Accept参数或者传参为application/json,那么会返回json格式的数据

d.如果Accept参数为text/html,那么会返回可浏览的api页面(html页面)

e.Response第一个参数为,经过序列化之后的数据(往往需要使用序列化器对象.data)

f.status指定响应状态码

先使用django自带的view,获取一个Card表里面的卡号信息:

models.py设计card表

views.py视图的编写

urls.py设置访问地址

REST framework的APIView继承了django的View类,先序列化Card类,这里的序列化用rest_framework里面的ModelSerializer

配置urls.py,设置访问地址

django 序列化json问题

models.Insurers.objects.all() 这句似乎是把所有模型数据生成json,试试看提取你需要的field。

或者直接处理生成的json。获取fields的数据

Django教程-02连接初始化数据库

Django教程——01安装使用

在上面一篇文章里,介绍了安装Django的方法,这里说说连接数据库吧

这篇主要介绍踩的坑和解决办法

正常连接和初始化数据库的命令是

执行这个命令的时候,出现了如下报错

经过一段排查,是我配置数据库的时候,多嵌套了一层default,修改为如下即可

然后继续执行migrate时,会报如下错误

本机环境是mac电脑,按官方教程操作的时候,发现安装mysqlclient的python包会依赖本机安装mysql或者mysql-client,但在装mysql和mysql-client的时候,发现一直报错。后面发现解决办法是,在settings.py文件里,加下如下代码,即改用pymsql连接即可。

或者在settings.py同目录的__init__.py里加如上代码也可以

然后再执行python manage.py migrate命令会发现表顺利创建。新增表,不影响原有库的其他表。

如何在Eclipse中利用pydev调试Django

1.    调试环境安装

Ø       PyDev插件安装

在主菜单“Help”—“Software updates…”中添加http //pydev sf net/updates自动下载安装。

Ø       安装完毕配置

在主菜单“window”—“preference”中

2.    创建Pydev Django project

Ø       创建新的

如果已经有了一个django的目录结构,要生成eclipse的工程,可以通过

或者

新建工程。

创建一个即可。

Ø       导入已创建的

如果已有一个eclipse django project指向该目录,可以通过导入方式来引用该project。

Ø       工程设置

工程新建或导入完毕,在工程右键中,选择“属性”,继续配置工程:

顺便配置下project type:

3.    调试设置

可以通过如下配置来实现Web调试,或者一个功能单独调试:

Ø       Web调试方式配置

Web调试,实际上就是选用内部的“manage.py runserver --noreload”功能进行调试。

设置完毕,再每次运行该调试选项即可。运行后控制台中出现如下说明:

然后在浏览器中选定录入等相关URL,在需要调试地方打断点即可。

在pydev中调试,修改代码后不能立刻起作用,必须重新调试才行。这也是 noreload的作用。

Ø       单个功能验证

有时只想单独运行某个功能,可以将该功能单独弄一个python函数进行运行。Python的函数调试很简单;但是对于django,因为脱离了Web的配置,调试一个django函数的时候总是因为找不到相关的设置而失败,可以在代码中指定该设置即可。

测试函数:

#导入django project设置

#django.bin.mypython为django工程所在目录

import os

os.environ['DJANGO_SETTINGS_MODULE']='django.bin.mypython.settings'

#说明,如果用到序列化方法,上述方法会提示很多应用模块找不到;

#建议采用如下方法是最好的

from django.core.management import setup_environ

import django.bin.mypython.settings

setup_environ(django.bin.mypython.settings)

#但是最后会出现“Exception exceptions.AttributeError: "'NoneType' object #has no attribute 'print_exc'" in bound method Signal._remove_receiver #of django.dispatch.dispatcher.Signal object at 0x01476890 ignored”。#无解。

#测试函数,注意没有web调用的request等

from django.core import serializers

from mypython.addressbook.models import Address

def test():

objs = Address.objects.all()

str = serializers.serialize("json", objs) #序列化为json对象

print str

#运行测试函数

test()

设置调试项

然后运行即可。

可以借由此进行测试先行,单元测试。

结语:以上就是首席CTO笔记为大家整理的关于django嵌套序列化怎么导入的相关内容解答汇总了,希望对您有所帮助!如果解决了您的问题欢迎分享给更多关注此问题的朋友喔~


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:/Python/15732.html