惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园_首页
B
Blog
V
V2EX
T
Tailwind CSS Blog
Hugging Face - Blog
Hugging Face - Blog
博客园 - 【当耐特】
博客园 - 聂微东
博客园 - 叶小钗
博客园 - 三生石上(FineUI控件)
The Cloudflare Blog
J
Java Code Geeks
H
Help Net Security
雷峰网
雷峰网
Apple Machine Learning Research
Apple Machine Learning Research
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Engineering at Meta
Engineering at Meta
F
Fortinet All Blogs
Martin Fowler
Martin Fowler
D
Docker
L
LangChain Blog
人人都是产品经理
人人都是产品经理
爱范儿
爱范儿
WordPress大学
WordPress大学
V
Visual Studio Blog

Django

请教下 哪款 vscode 插件可以通过点击跳转 urls 定义 Django 一文告诉你 all 懒加载的机制 大家学习编程做项目的时候一开始会容易卡壳吗?比如我今天一个下午才弄出来了博客当中的文章评论加回复功能,有时候会因为一个小点卡壳,稍微复杂点的逻辑就感觉脑子不够用,甚至是给 html 的 div 取变量名的时候脑子也会不够 请教在 ubuntu23 中如何 让 Django runserver 开机自启动 请教 Django runserver 开机自启动的问题 不知道开发的流媒体合租平台有没有意义… 公司自主招聘(远程)后端 Go 开发,想要远程岗位抓紧啦 [求助] Mediacms 接入 Keycloak 有没有好的 drf 项目可以学习下的? django 快速开发明明 drf 更好,为啥还是很多人更推荐 fast.api 和忍者 django 的同步机制有性能瓶颈为什么还是有很多人用? 大家怎么处理开发时 Migration 一大堆,修修改改啰啰嗦嗦,同步到生产之前还得检查合并下这个问题的? Django 模型自定义 Manager 自定义 filter 如何支持链式调用? python3 manage.py build_index 这条 Django 命令到底啥意思啊?官方文档找不到说明,谢谢 前后端分离项目, Django 良好的项目结构是怎么样的 Django get_max_test_processes Django makemigrations 生成的 migrations 文件,如何放在代码当前目录的文件夹中? 请教下大家,Django 的 tests 测试模块,如何不创建新从测试数据库,而是直接操作生产环境数据库谢谢! django 好像对于 ios 打不开 admin page Django 模板中变量的嵌套 早起把网站的友链网页和自主添加友链功能撸出来了,过来收集一波友链 用 django 调用长时间执行的脚本,如何返还输出呢? Django 中递归分类 model 用什么组件显示比较合适? django 一开始没用 restfulapi 开发, 还能自动生成文档吗? 求推 django 数据可视化插件 django 用 docker 部署,要不要每次部署到服务器的时候改改 image 的 settings 配置 有没有使用 django 国际化模块的,针对 django.po 国际化文件写了一个 vscode 的插件 Django 访问 relation 时,如何得知是谁访问的? django admin 部分自带的 css 文件 collectstatic,生成的文件大小为 0? Django 怎么做同一个 url,对应不同的 view 函数?
关于如何根据 Accept 的 media_type 返回不同类型序列化数据...
firejoke · 2021-11-19 · via Django

DRF 的 HyperLinkedRelatedField 非常好用,但请求 Json 格式的数据的时候,还要在根据返回的 url 字段再请求一遍,所以有了个想根据请求头确定返回数据类型的想法

class BaseSerializer(serializers.HyperlinkedModelSerializer):

    def __new__(cls, *args, **kwargs):
        media_field = kwargs["context"]["request"].accepted_media_type
        if hasattr(cls, "related_fields"):
            for name, fields in cls.related_fields.items():
                if "text" in media_field:
                    field = fields.get("text", None)
                elif "json" in media_field:
                    field = fields.get("json", None)
                elif "yaml" in media_field:
                    field = fields.get("yaml", None)
                else:
                    log.error(f"{name} not found any type field")
                    continue
                cls._declared_fields[name] = field
                cls.Meta.fields += (name,)
        return super().__new__(cls, *args, **kwargs)

根据请求头里包含的 accepted_media_type 来判断
使用方法

class PermissionSerializer(BaseSerializer):
    url = serializers.HyperlinkedIdentityField(
        view_name='permission-detail',
        lookup_field="codename",
        # lookup_url_kwarg="codename",
    )
    name = serializers.CharField(max_length=255)
    codename = serializers.CharField(max_length=100)
    content_type = serializers.SlugRelatedField(
        read_only=True,
        slug_field="app_label"
    )
    related_fields = dict(
        user_set=dict(
            text=serializers.HyperlinkedRelatedField(
                view_name='user-detail', many=True,
                queryset=User.objects.get_queryset(),
                lookup_field="username",
                required=False,
            ),
            json=serializers.StringRelatedField(many=True),
            yaml=serializers.StringRelatedField(many=True),
        ),
        group_set=dict(
            text=serializers.HyperlinkedRelatedField(
                view_name='group-detail', many=True,
                queryset=Group.objects.get_queryset(),
                lookup_field="name",
                required=False, ),
            json=serializers.StringRelatedField(many=True),
            yaml=serializers.StringRelatedField(many=True),
        ),
    )

    class Meta:
        model = Permission
        fields = (
            'name', 'codename', 'content_type', 'url'
        )

测试可行,还有其他好用的方法吗?
或者说我这个方法符合 REST 的风格吗?