是否有可能在連接到pre_delete信號的回調中獲得登錄的django用戶(即調用模型的刪除方法)?django中的pre_delete信號中的當前用戶
回答
pre_delete
信號沒有通過請求實例,但是您可以添加一個裝飾器,添加它並在視圖上使用該裝飾器,這會刪除指定的模型。
假設這是回調函數:這是在裝飾添加
def pre_delete_cb(sender, instance, using, **kwargs):
pass
:
from django.db.models.signals import pre_delete
from functools import wraps
from django.utils.decorators import available_attrs
def pre_delete_dec(cb, sender):
def decorator(view_func):
@wraps(view_func, assigned=available_attrs(view_func))
def _wrapped_view(request, *args, **kwargs):
cb.request = request # here we add the request to the callback function
pre_delete.connect(cb, sender=sender) # and connecting the real pre_delete to the callback
return view_func(request, *args, **kwargs)
return _wrapped_view
return decorator
並使用在你打電話的方式視圖的裝飾 - 而不是pre_delete.connect(pre_delete_cb, MyModel)
,使用:
@pre_delete_dec(pre_delete_cb, MyModel)
def myview(request):
然後在回調中,您將有權訪問t Ø請求爲:
def pre_delete_cb(sender, instance, using, **kwargs):
current_user = pre_delete_cb.request.user
您可以在全球範圍添加此,不只是每個視圖 - 使用中間件:
from django.db.models.signals import pre_delete
def pre_delete_cb(sender, instance, using, **kwargs):
current_user = pre_delete_cb.request.user
class PreDeleteMiddleware(object):
def process_view(self, request, view_func, view_args, view_kwargs):
pre_delete_cb.request = request
from myapp.models import MyModel
pre_delete.connect(pre_delete_cb, sender=MyModel)
是否有可能爲幾種模型創建更通用的解決方案?在您的解決方案中,如果我理解正確,則必須爲每個模型單獨裝飾每個視圖。 – 2012-07-17 09:27:24
當然,使用中間件。只需刪除PreDeleteMiddleware的最後2行,並將它們添加到代碼中的某處,無論您喜歡什麼模式。只需在'pre_delete.connect(pre_delete_cb,sender = some_model)'中使用pre_delete_cb回調方法。中間件的確與真實模型無關。它只需要將請求屬性設置爲回調函數。但是你也可以使用裝飾器 - 將pre_delete.connect移出它。它只需要請求對象和回調。 – Tisho 2012-07-17 10:36:39
- 1. 在Django中使用Pre_delete信號
- 2. Django pre_delete信號被忽略
- 3. pre_delete信號錯誤
- 4. Django信號中的用戶對象
- 5. 從管理員表單中的pre_delete信號渲染ValidationError?
- 6. 傳遞pre_delete()或post_delete()信號參數?
- 7. Django中的信號
- 8. 如何用pre_delete信號發送額外的參數?
- 9. Django:從信號中獲取當前域名(http_host)
- 10. django中的信號問題
- 11. Django查詢過濾掉用戶列表中的當前用戶
- 12. Django登錄user_login_failed信號的用戶IP
- 13. Redmine當前用戶信息
- 14. Django的信號中的用戶時,是registred與Facebook
- 15. Grails中的當前用戶
- 16. django的信號
- 17. Django中用戶可配置的信號機制
- 18. 相當於Django信號的Rails?
- 19. 如何在Django的forms.py中獲取當前用戶的ID?
- 20. 將當前登錄的用戶傳遞給Django中的submit_line.html
- 21. 當前登錄用戶的CAS號碼
- 22. 來自當前用戶的PFQuery編號...
- 23. Android當前用戶帳戶信息
- 24. Lua中的當前行號
- 25. Python-Django:模板中的用戶信息
- 26. Django信號和用戶驗證
- 27. 如何在Django中檢查當前用戶的權限?
- 28. 在Django中,我如何知道當前登錄的用戶?
- 29. Django:如何獲取管理員表單中的當前用戶
- 30. django:如何訪問ModelForm中的當前請求用戶?
你可能不得不去與treadlocal的做法,但也有可能根據你試圖達到的目標,更好地解決你的問題,換句話說,你需要提供更多有關你的問題背景的信息。 – 2012-07-16 08:56:07
後端數據庫中有一個on-delete觸發器,用於在某些表中存儲關於已刪除信息的on-delete觸發器記錄在其他表格中。我需要誰(哪個django用戶)啓動刪除操作的信息,所以我試圖使用一種方法,用django-user id更新要刪除的記錄,這樣用戶就可以用於觸發器。 – 2012-07-16 09:38:12