小编Bra*_*ery的帖子

如何处理django-social-auth引发的异常?

django-social-auth某些情况下,后端将引发一个ValueError(例如,当用户取消登录请求或用户尝试与已与其他用户关联的帐户关联时).如果用户遇到其中一种情况,他们将在您的网站上显示500错误.

那么,抓住这些最好的方法是什么?当发生这种情况时,我更愿意能够显示有用的消息(通过消息框架),但是我不知道最好的方法.

我正在考虑编写我自己的视图(在一个单独的应用程序中),只是包装social_authassociate_complete视图,但这看起来很笨拙......任何想法?

我可以分叉django-social-auth并自定义这种行为,但我宁愿不维护一个单独的fork - 特别是因为我不能认为任何人都想以同样的方式处理这些异常.

authentication django social django-socialauth

19
推荐指数
4
解决办法
5514
查看次数

如何将python dict呈现为具有垂直列的html表

我有一个python dict,其中每个键对应一个标题,与每个标题相关的列表包含任意数量的值:

data = { 
    "heading1": ['h1-val1', 'h1-val2', 'h1-val3', ],
    "heading2": ['h2-val1', ],
    "heading3": ['h3-val1', 'h3-val2', 'h3-val3', 'h3-val4', ],
} 
Run Code Online (Sandbox Code Playgroud)

我需要在Django模板中将其呈现为表格,其中值在每个标题下方垂直列出,任何缺失值呈现为空表格单元格:

<table>
<thead>
    <tr>
    <th>heading1</th>
    <th>heading2</th>
    <th>heading3</th>
    </tr>
</thead>
<tbody>
    <tr>
    <td>h1-val1</td>
    <td>h2-val1</td>
    <td>h3-val1</td>
    </tr>
    <tr>
    <td>h1-val2</td>
    <td></td>
    <td>h3-val2</td>
    </tr>
    <tr>
    <td>h1-val3</td>
    <td></td>
    <td>h3-val3</td>
    </tr>
    <tr>
    <td></td>
    <td></td>
    <td>h3-val4</td>
    </tr>
</tbody>
</table>
Run Code Online (Sandbox Code Playgroud)

实现这一目标的最佳方法是什么?

我的第一个倾向是将原始字典重新排列成2D矩阵,然后将其传递到模板中.我敢肯定,我不是第一个遇到这种问题的人,我很好奇其他人是如何解决这个问题的.

更新:仅供参考,这是我对这个问题的原始解决方案(我对此并不满意).

# Using the data dict from the question:
size = max(len(data['heading1']), len(data['heading2']), len(data['heading3']))
matrix = [[None, None, None] for i in range(size)] # initialize …
Run Code Online (Sandbox Code Playgroud)

django django-templates

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

Django模型重构和迁移

我想重构一些django应用程序,其方式是将模型从一个应用程序移动到另一个应用程序,以便更容易重用.

许多这些模型与其他模型(例如用户)具有ForeignKey关系或M2M关系.例如:

class Department(models.Model):
    name = models.CharField(max_length=255)
    reviewers = models.ManyToManyField(User)
Run Code Online (Sandbox Code Playgroud)

在大多数情况下,模型不会改变,所以我现在只是在新的应用程序中重新定义它们.这当然会导致related_name出现问题,因为我在两个独立的应用程序中定义了相同的模型,并manage.py syncdb给出以下错误:

new_app.department: Accessor for m2m field 'reviewers' clashes with related m2m field 'User.department_set'. Add a related_name argument to the definition for 'reviewers'.
old_app.department: Accessor for m2m field 'reviewers' clashes with related m2m field 'User.department_set'. Add a related_name argument to the definition for 'reviewers'.
Run Code Online (Sandbox Code Playgroud)

执行此操作时,我还需要迁移数据,以保留任何自动生成的数据库ID.我计划使用ORM进行迁移,认为以下内容可行:

from newapp.models import Department
import oldapp.models as old

for obj in old.Department.objects.all():
    new_obj = Department(id=obj.id, name=obj.name)
    new_obj.save()
    for r in obj.reviewers.all():
        new_obj.reviewers.add(r)
    new_obj.save() …
Run Code Online (Sandbox Code Playgroud)

python django django-models

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