小编Edg*_*yan的帖子

Django - 异常处理最佳实践并发送自定义错误消息

我开始考虑在我的Django应用程序中进行适当的异常处理,我的目标是尽可能使用它.根据用户友好性,我暗示用户必须始终详细说明究竟出了什么问题.在这篇文章之后,最佳做法是

使用状态为200的JSON响应作为正常响应,并返回(适当的!)4xx/5xx响应以查找错误.这些也可以携带JSON有效负载,因此您的服务器端可以添加有关错误的其他详细信息.

我试着通过这个答案中的关键词谷歌,仍然有更多的问题而不是我的脑海中的答案.

  1. 如何确定要返回的错误代码(400或500)?我的意思是,Django有许多预定义的错误类型,我如何在Django异常类型和400-500错误代码之间实现这种映射,以使异常处理块尽可能干和可重用?
  2. @Reorx在帖子中提出的中间件方法是否可行?(答案只有一个upvote,因此我不愿意深入研究细节并在我的项目中实现它
  3. 最重要的是,有时我可能希望引发与业务逻辑相关的错误,而不是错误的语法或像null值这样的标准.例如,如果我的法人实体中没有CEO,我可能希望禁止用户添加合同.在这种情况下应该是什么错误状态,以及如何使用我对用户的错误的详细说明抛出错误?

让我们以简单的观点来考虑它

def test_view (request):

   try:
          # Some code .... 
          if my_business_logic_is_violated():
              # How do I raise the error
              error_msg = "You violated bussiness logic because..."
              # How do I pass error_msg 
          my_response = {'my_field' : value}
  except ExpectedError as e:
          # what is the most appropriate way to pass both error status and custom message
          # How do I list all possible error types here (instead of ExpectedError to make …
Run Code Online (Sandbox Code Playgroud)

python django ajax json

20
推荐指数
2
解决办法
3万
查看次数

从VBA插入公式时会出现不同的语言

我是否理解正确,如果我使用像这样的命令

Set myRange.formula = “=ROW(mySheet!R12)” 
Run Code Online (Sandbox Code Playgroud)

我的宏将导致#NAME?单元格出现错误,如果它运行在俄语Excel上.我的意思是在这种情况下,上面的公式应该是硬编码的

Set myRange.formula = “=??????(mySheet!R12)”
Run Code Online (Sandbox Code Playgroud)

其中СТРОКА是SUM函数的俄语模拟.我不希望Excel足够聪明,可以在运行时翻译公式.那么有什么方法可以解决这个问题,最重要的是,无论languange如何,使宏工作正常的最通用的代码是什么?

excel vba excel-vba regional-settings

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

Django - APPEND_SLASH 和 POST 请求的问题

我正在使用 Django 1.10,我现在的目标是使 url 可用和不带斜杠。为此,我向 URLConf 文件中的所有 URL 添加了斜杠,然后将APPEND_SLASH变量值设置为True(嗯,这是默认值)。

现在的问题是外部 POST 请求(我无法控制)产生以下错误:

您通过 POST 调用了此 URL,但该 URL 不以斜杠结尾,并且您设置了 APPEND_SLASH。Django 无法在维护 POST 数据的同时重定向到斜杠 URL。将您的表单更改为指向 127.0.0.1:8000/Calendar/AddAccounts/(注意尾部斜杠),或在您的 Django 设置中设置 APPEND_SLASH=False。

他们在Django doc 中提到了这一点,但在网上冲浪几个小时后,我不知道如何解决这个问题。

我也遇到过这个问题,但提议的解决方案对我来说似乎不可接受。它说我必须让用户只用斜杠来调用我的 URL。虽然我知道在其他语言(例如 C#)中可以同时启用这两个选项

django

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

DRF - 如何在 CreateAPIView 中获取创建的对象

我的目标与这个问题中提出的问题非常相似,但是是从 DRF 的角度来看,而不是从表单的角度来看。

所以基本上问题是,如何在以下代码片段中获取新创建的对象:

TestSerializer(serializers.ModelSerializer)
    class Meta:
        fields = '__all__'
        model = TestModel


class TestView(generics.CreateAPIView):
    serializer_class = TestSerializer

    def create(self, request, *args, **kwargs):
        response = super(TestView, self).create(request, *args, **kwargs)
        created_model_instance = .... ?
        print(created_model_instance.id)
        return response
Run Code Online (Sandbox Code Playgroud)

django-generic-views django-rest-framework

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

如何检查Excel单元格是否包含REF!VBA中的错误

我发现了很多关于如何在Excel中进行的讨论,但我的目标是捕获REF!VBA中的错误,而不是Excel本身.可能吗 ?

vba ref

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

Django prefetch_related - 使用来自不同表的or-clause进行过滤

我有一个简单关系的模型

class Tasks(models.Model):
   initiator = models.ForeignKey(User, on_delete = models.CASCADE)

class TaskResponsiblePeople(models.Model):
    task = models.ForeignKey('Tasks')
    auth_user = models.ForeignKey(User)
Run Code Online (Sandbox Code Playgroud)

我需要编写一个SQL查询的模拟,如下所示:

select a.initiator, b.auth_user 
from Tasks a
inner join TaskResponsiblePeople b
on TaskResponsiblePeople.task_id = task.id 
where Tasks.initiator = 'value A' OR TaskResponsiblePeople.auth_user = 'value B'
Run Code Online (Sandbox Code Playgroud)

问题是OR语句处理两个不同的表,我不知道正确的Django语法来模仿上面提到的原始SQL查询.请帮帮我!

更新1

根据下面给出的答案,我使用以下代码:

people = TaskResponsiblePeople.objects.filter(Q(task__initiator = request.user.id)|Q(auth_user = request.user.id)).select_related('auth_user')
print people.query
# The result of the print copy-pasted from console
# SELECT * FROM `task_responsible_people` 
# LEFT OUTER JOIN `tasks` ON (`task_responsible_people`.`task_id` = `tasks`.`id`)
# LEFT OUTER …
Run Code Online (Sandbox Code Playgroud)

django prefetch

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

Django related_name 在多重关系的情况下命名最佳实践

经过一年的 Django 经验,我发现我不太确定我related_names是否正确使用了 Django 。

想象一下我有三个模型

classA(models.Model):
    pass
classB(models.Model):
    pass
classC(models.Model):
    modelA = models.ForeignKey(classA)
    modelB = models.ForeignKey(classB)
Run Code Online (Sandbox Code Playgroud)

美好的。现在我正在考虑添加related_name到 classC 的 modelA 和 modelB,但令人沮丧的是我不能对两个字段使用相同的名称。换句话说,这段代码显然是错误的

 classC(models.Model):
            modelA = models.ForeignKey(classA, related_name = 'classC') # wrong
            modelB = models.ForeignKey(classB, related_name = 'classC') # wrong
Run Code Online (Sandbox Code Playgroud)

另一方面,提出这样的方法:

classC(models.Model):
        modelA = models.ForeignKey(classA, related_name = 'classA') # wrong
        modelB = models.ForeignKey(classB, related_name = 'classB') # wrong
Run Code Online (Sandbox Code Playgroud)

会导致一个非常具有误导性(至少对我而言)的代码。考虑一下:

obj = classA.filter(classC__in = classA_qs)
Run Code Online (Sandbox Code Playgroud)

所以这样的命名会导致非常具有破坏性的代码classC = classA_instance

在命名related_names方面的最佳实践是什么。我对 ManyToManyFields 有什么遗漏吗?实际上,我有一个大项目,但我从来没有使用过 ManyToManyFields,在示例中总是使用第三个表,如 classC。有什么我想念的吗?

django

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

让 Django 为 TextField 而不是 textarea 构建 contenteditable div

在我的 Django 1.10 项目中,我有一个模型:

class Contact(models.Model):
    notes = models.TextField()
Run Code Online (Sandbox Code Playgroud)

...和模型形式:

class ContactForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):    
        super(ContactForm, self).__init__(*args, **kwargs)   
        for field_name, field in self.fields.items():
            field.widget.attrs['class'] = 'form-control input-sm plain'
            if field.required == True: 
                field.widget.attrs['required'] = ''

    class Meta:
        model = Contact
        fields = ('notes',)
Run Code Online (Sandbox Code Playgroud)

对此我有两个问题:

  1. 我可以让 Django 将notes字段渲染为divwithcontenteditable=true而不是 textarea 吗?
  2. 如果是,如何自动化 form.save() 方法?

第二个问题有点模糊,所以我将不胜感激有关第一个问题的提示。我已阅读文档,但找不到相关部分:(

django django-templates

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

改变Bootstrap的导航丸的高度

这个话题与我正在寻找的内容非常接近,但在几个小时之后仍然没有帮助丰富目标.我只是想通过编辑原始的Bootstrap.css文件来降低bootstrap tab pill的高度.

的jsfiddle

我从外部资源中删除了原始文件链接,并将原始代码放在css部分中,以便可以进行实验

在此输入图像描述

<ul class="nav nav-pills" id="task_management_tab">
  <li class="active"><a data-toggle="pill" href="#tasks_private">A</a></li>
  <li><a data-toggle="pill" href="">B</a></li>
  <li><a data-toggle="pill" href="">C</a></li>
  <li><a data-toggle="pill" href="">D</a></li>
</ul>
Run Code Online (Sandbox Code Playgroud)

html css twitter-bootstrap

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

Django - 如何在不对源对象应用克隆更改的情况下克隆对象

最好用例子来描述:

看法:

def my_view(request):
    obj_old = Inventories.objects.get(id = source_id)
    obj_new = obj_old 
    obj_old.some_field = 0
    obj_old.save()

    obj_new.some_field = 1
    obj_new.id = None
    obj_new.save()
Run Code Online (Sandbox Code Playgroud)

问题是,我做出obj_new的变化也适用于obj_old使的值some_field是1两obj_oldobj_new。任何想法如何解决这一问题 ?

python django

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