0
考慮auth_user表,一個簡單的歌曲表和一個所有者表。考慮一首歌只有一個作者是登錄用戶,只能由一個所有者擁有。還要考慮到用戶可以擁有許多已知的潛在所有者。web2py,創建一個用戶自己可以選擇的事物下拉表單
主表:
db.define_table(
'owner',
Field('user_id', 'reference auth_user'),
Field('name'),
Field('first_name'),
Field('telephone'),
format = '%(name)s, %(first_name)s'
)
歌曲表
db.define_table(
'song',
Field('user_id', 'reference auth_user'),
Field('owner_id', 'reference owner', requires=IS_EMPTY_OR(IS_IN_DB(db, db.owner.id))),
Field('name'),
Field('description', 'text'),
)
在控制器考慮一個簡單的函數:
def create():
form = SQLFORM(db.song).process(next=URL('index'))
return dict(form=form)
我想創建一個表單中,用戶可以指定歌曲的知名所有者。可悲的是,現在用戶可以將其他用戶的已知所有者分配給他們的歌曲。
我該怎麼做才能確保表單只列出用戶的已知所有者?有沒有辦法在數據庫層執行此操作來防止ID注入和owner_id捕魚?
謝謝
再次感謝您安東尼!你能告訴我書中IS_EMPTY_OR的參數是在哪裏定義的(其他所有內容),我非常驚訝,但我完全不瞭解使用情況。謝謝 – PyWebDesign