כתיבת קוד — שיעור 20
מסדי נתונים
כל 2 משימות הקוד שנשמרו מהשיעור מופיעות כאן, עם דרישות, דוגמאות וקוד פתיחה. אפשר לכתוב פתרון בעורך המקומי וללחוץ על „בדיקת AI” לקבלת ציון, רמזים והערות.
T2 · בסיסי250 נק'~18 דק'build
ולידציית Schema (סגנון Mongoose)
ממש validate(schema, doc) המחזיר רשימה ממוינת של שגיאות. schema ממפה שדה→{'type':'str'|'int'|'bool', 'required':bool}. עבור כל שדה: שדה חובה חסר → "missing:FIELD"; טיפוס שגוי → "type:FIELD". שדה במסמך שאינו ב-schema → "extra:FIELD" (הגנה מפני mass-assignment). שים לב: True/False אינם int תקין.
דוגמאות
validate(S, {'name':'x','age':5}) → []
validate(S, {'age':5}) → ['missing:name']
validate(S, {'name':'x','role':'admin'}) → ['extra:role']
הפתרון נשמר מקומית אוטומטית.
T3 · בינוני400 נק'~25 דק'build
בניית שאילתה בטוחה (נגד SQL Injection)
ממש build_query(table, filters) המחזיר (sql, params) לשאילתת SELECT מפורמטרת. ערכי המשתמש חייבים להפוך ל-placeholders (?) ולעולם לא לשרשור למחרוזת — כך מונעים SQL injection. עמודות ממוינות לפי א"ב. מזהי טבלה/עמודה (שאי אפשר לפרמטר) חייבים לעבור ולידציה מול ^[A-Za-z_]\w*$; מזהה פסול → זרוק ValueError. ללא פילטרים → "SELECT * FROM table".
דוגמאות
build_query('users', {'id':5}) → ('SELECT * FROM users WHERE id = ?', [5])
build_query('users', {'name':'a','age':2}) → ('SELECT * FROM users WHERE age = ? AND name = ?', [2, 'a'])
הפתרון נשמר מקומית אוטומטית.