导读:很多朋友问到关于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嵌套序列化怎么导入的相关内容解答汇总了,希望对您有所帮助!如果解决了您的问题欢迎分享给更多关注此问题的朋友喔~