小编Sam*_*xas的帖子

django信号是否也包含在transaction.atomic装饰器内?

我有一个模型文件,它使用一个post_save信号在另一个表中创建一个链接的行.以典型的方式,我可以从我的一个视图创建一个页面,该视图用@ transaction.atomic修饰.

我想知道这个装饰器是否会在同一个事务中创建Page对象和SharedPage对象.从django文档中不清楚信号是这个原子事务的一部分.

models.py

class Page(models.Model):
    name = models.CharField(default='My default page',max_length=200,blank=False)
    created_at = models.DateTimeField(auto_now_add=True)
    owner = models.ForeignKey(User, on_delete=models.CASCADE)
    slug = models.SlugField()
    uuid = models.UUIDField(default=uuid.uuid4, editable=False)
    is_public = models.BooleanField(default=False)

    def __str__(self):              # __unicode__ on Python 2
        return self.name

    class Meta:
        ordering = ['position','created_at']

@receiver(post_save, sender=Page)
def create_shared_page_entry(sender, instance, created, **kwargs):
    if created:
        shared_page = SharedPage.objects.create(
            page=instance,
            user=instance.user,
            can_edit=True
        )
Run Code Online (Sandbox Code Playgroud)

view.py

@require_http_methods(["POST"])
@transaction.atomic
def page_create(request):
    name = request.POST.get('name')
    page = Page.objects.create(name=name, owner=request.user)

    data = serializers.serialize("json", [page])
    return HttpResponse(data, content_type='application/json')
Run Code Online (Sandbox Code Playgroud)

python django transactions django-signals django-models

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

Keycloak从数据库/外部源添加额外声明

我无法理解我从应用程序数据库中添加额外声明的方式.鉴于我的理解有限,我看到两种方式:

  1. 成功验证后,keycloak以某种方式从应用程序数据库中提取额外的声明.例如,这个app数据库是postgres.
  2. 让应用程序使用共享密钥使用额外声明更新jwt.

我想要两条路径的反馈.我觉得第一种选择可能更安全.但是我不确定从哪里开始实施.

jwt keycloak

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