2011-11-03 59 views
0
使用冗餘維權

所以我有這樣的網址:怎麼不,當涉及到查詢多個表

url(r'^(?P<loc>\w+)/(?P<ctg>\w+)/$', 'beta.views.queryCtgFromIndex'), 

它,因爲它可以看出,訪問的時候,例如,/祿/ ctgx /對queryCtgFromIndex被調用,它基於ctgx表計算的東西

我居然有5臺可以查詢,所以有效的URL可以是:

/loc/ctg1/, /loc/ctg2/, ..., /loc/ctg5/ 
在我看來,我做類似

if ctg == ctg1: do something, ctg1.objects.all() etc... 
if ctg == ctg2: do something, ctg2.objects.all() etc... 
... 
if ctg == ctg5: do something, ctg5.objects.all() etc... 

做點什麼代碼是相當大的,我的問題是:我可以重寫我的代碼以某種方式擺脫五種維權,並有乾淨的代碼? ...像在bash是,虛構的例子:$ ctg.objects.all()...

回答

3

contenttypes框架,讓你在一個通用的方法與模型互動,像

my_model = contenttypes.objects.get(model='my model name') 
my_model.model_class().objects.filter(...whatever you would normally do) 

你可能想要使用白名單來確保只有用戶不能與例如這樣的用戶模型,例如

if model_name not in ['list', 'of', 'allowed', 'models']: 
    return HttpResponseForbidden() #or 404 
+0

太棒了!謝謝,你救了我很多麻煩和代碼行:) 我做過 - 如果'model_name'在str(my_model.model_class()):做sumthin else:403/404 – marlboro