小编Joh*_*aff的帖子

如何在django REST框架中修改request.data

我正在使用Django REST Framework

request.data = '{"id": "10", "user": "tom"}'
Run Code Online (Sandbox Code Playgroud)

我想"age": "30"在发送它之前添加额外的属性

    request.data = new_data
    response = super().post(request, *args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

我有两个问题

  1. 为什么request.data是字符串而不是字典
  2. 我如何更新request.data

python django json django-rest-framework

18
推荐指数
5
解决办法
1万
查看次数

如何在python中获取该函数内的当前函数名称

为了我的日志记录目的,我想记录我的代码所在的函数的所有名称

谁调用函数无关紧要,我想要声明这一行的函数名称

import inspect

def whoami():
    return inspect.stack()[1][3]

def foo():
    print(whoami())
Run Code Online (Sandbox Code Playgroud)

目前它打印foo,我想打印 whoami

python inspect

12
推荐指数
5
解决办法
2万
查看次数

我如何在 django rest 序列化程序中批量创建

我曾经使用在 django rest 2.0 中可用的allow_add_remove=True来编写可嵌套序列化程序,但它在 3.0 中不可用,我很难实现它。

我想做这样的事情

class UserSerialzier():
    project = ProjectSerilaizer(many=True, allow_add_remove=True, read_only=False)


class ProjectSerialzier():
    ideas = IdeaSerilaizer(many=True, allow_add_remove=True, read_only=False)
    sources = SourceSerilaizer(many=True, allow_add_remove=True, read_only=False)

class IdeaSerialzier():
    pass

class SourceSerialzier():
    pass      
Run Code Online (Sandbox Code Playgroud)

现在我不知道如何在 DRF 3.0 中实现 allow_add_remove 行为

我很困惑的是我需要重写createupdateUserSerializer的方法

或者我需要为每个模型创建单独的 IdeaListSerializer

class IdeaListSerializer(serializers.ListSerializer):
    def create(self, validated_data):
        ideas = [Idea(**item) for item in validated_data]
        return Ideas.objects.bulk_create(books)
Run Code Online (Sandbox Code Playgroud)

python django django-rest-framework

11
推荐指数
1
解决办法
1万
查看次数

如何在 django rest 框架中覆盖异常消息

我正在使用基于 Django 类的视图和休息框架

object = self.get_object()
Run Code Online (Sandbox Code Playgroud)

在详细视图中,如果对象不存在并且我确实收到了类似的请求

/user/10
Run Code Online (Sandbox Code Playgroud)

然后我得到这个回应

{"detail": "not found"}
Run Code Online (Sandbox Code Playgroud)

现在我想自定义该响应

喜欢

try:
   obj = self.get_object()
except:
   raise Exception("This object does not exist")
Run Code Online (Sandbox Code Playgroud)

但这不起作用

python django django-rest-framework

8
推荐指数
2
解决办法
1万
查看次数

如何在django中嵌套的序列化程序中过滤查询集

我有这个代码

# Models

class NestedSample(models.Model):
    something = models.CharField(max_length=255)

class Sample(models.Model):
    thing = models.BooleanField()
    nested = models.ForeignKey(NestedSample)

# Serializers

class NestedSampleSerializer(serializers.HyperlinkedModelSerializer):

    class Meta:
        model = api_models.NestedSample

class SampleSerializer(serializers.HyperlinkedModelSerializer):
    nested = NestedSampleSerializer() # HERE filter delete=false
    nested2 = NestedSample2Serializer() # HERE filter deletefalse

    class Meta:
        model = api_models.Sample
Run Code Online (Sandbox Code Playgroud)

在我看来,我正在覆盖查询集,delete=False但它不适用于嵌套的序列化程序.

python django django-rest-framework

7
推荐指数
2
解决办法
2637
查看次数

使用Django REST进行LDAP身份验证

目前,我具有访问Django REST Api后端的基本权限,并且可以使用username / passowrd通过创建的shell

我没有使用内置的所有内容的登录页面。

现在,我想从Active Directory中的LDAP验证用户名/ password。

有什么方法不需要为此创建“登录”页面,并且可以在同一位置输入用户名/密码,并且我的用户通过Active Directory进行身份验证。

我是否需要创建一些手动逻辑来获取用户名密码,然后对其进行邮寄,我在想是否可以在不进行诸如django已经提供的基本身份验证之类的工作的情况下获取它

python django ldap django-rest-framework

7
推荐指数
1
解决办法
3592
查看次数

通过shell登录时未设置Docker env变量

在我的设置文件中,我得到这样的env变量

'NAME': os.environ['PG_DBNAME'],  # Database
Run Code Online (Sandbox Code Playgroud)

我正在设置这样的docker文件

-e PG_DBNAME= "mapp"
Run Code Online (Sandbox Code Playgroud)

现在

  1. 网络应用程序工作正常
  2. 如果我通过docker exec ... bashen 登录shell,那么也会设置env变量

但是如果我从ssh客户端通过ipaddress和端口号登录,那么我可以登录但是没有设置env变量

django ubuntu docker

6
推荐指数
1
解决办法
2724
查看次数

如何在方法的所有装饰器的基础上应用类装饰器

我正在用这种方式装饰所有方法

import inspect

def decallmethods(decorator, prefix='test_'):
  def dectheclass(cls):
    for name, m in inspect.getmembers(cls, inspect.ismethod):
      if name.startswith(prefix):
        setattr(cls, name, decorator(m))
    return cls
  return dectheclass


@decallmethods(login_testuser)
class TestCase(object):
    def setUp(self):
        pass

    def test_1(self):
        print "test_1()"

    def test_2(self):
        print "test_2()"
Run Code Online (Sandbox Code Playgroud)

这是有效的,但它适用于顶部,如果我有其他装饰器.

我的意思是

现在的结果是

@login_testuser
@other
def test_2(self):
    print "test_2()"
Run Code Online (Sandbox Code Playgroud)

但我想要

@other
@login_testuser
def test_2(self):
    print "test_2()"
Run Code Online (Sandbox Code Playgroud)

python python-decorators

4
推荐指数
1
解决办法
483
查看次数

是否可以从 .git 文件夹中获取文件

我前段时间克隆了一个 git repo。克隆 repo 后,它有源文件和一个.git文件夹。现在只有.git文件夹。不知何故,文件被删除了(很久以前)。

这些是.git文件夹的内容:

Mic-Pro:sample.git mic$ ls
HEAD        config      config_     description hooks       info        objects     refs
Run Code Online (Sandbox Code Playgroud)

git status说该目录不是 git repo。只有那个.git文件夹,有没有办法恢复这些文件?

我无法克隆 repo,因为它不再可用

git version-control

4
推荐指数
1
解决办法
1761
查看次数

如何在django logger中获取应用程序名称

我有django的格式化程序

FORMAT = "[%(filename)s:%(lineno)s - %(funcName)20s() ] %(message)s"

我得到的文件名是

views.py

现在这很混乱,因为很难看出哪个模块是views.py.

是否有任何在logger格式化程序中获取appname

python django logging

2
推荐指数
1
解决办法
1207
查看次数

我需要使用django ORM的最小文件

我有python模块做一些东西,我需要在数据库中保存一些项目.

Currenlt我正在使用原始sql来插入数据.但我想使用django ORM.

我不需要任何网址,视图等我想要的只是我可以创建模型然后应该能够保存它

user.save()

现在我不想在那里有不必要的文件和数据.但我不确定我需要哪些文件.我需要

settings.py
urls.py
views.py
app folder.
Run Code Online (Sandbox Code Playgroud)

是否有可能只是models.py在设置中DATABASE config.

我是否也需要创建一个应用程序

python django django-orm

1
推荐指数
1
解决办法
853
查看次数