Performance: SQL injection protection via ORM
This concept affects page load speed indirectly by preventing costly database errors and security breaches that can degrade user experience.
Jump into concepts and practice - no test required
from django.db import connection user_input = "'; DROP TABLE users; --" query = "SELECT * FROM users WHERE username = %s" with connection.cursor() as cursor: cursor.execute(query, [user_input]) results = cursor.fetchall()
from django.db import connection user_input = "'; DROP TABLE users; --" query = f"SELECT * FROM users WHERE username = '{user_input}'" with connection.cursor() as cursor: cursor.execute(query) results = cursor.fetchall()
| Pattern | DOM Operations | Reflows | Paint Cost | Verdict |
|---|---|---|---|---|
| Raw SQL with string interpolation | N/A | N/A | N/A | [X] Bad |
| Parameterized queries with ORM | N/A | N/A | N/A | [OK] Good |
users = User.objects.filter(username=user_input) print(users.query)
query = "SELECT * FROM users WHERE username = '%s'" % user_input users = User.objects.raw(query)
user_domain = request.GET.get('domain')
# Which code is safe?
A) User.objects.filter(email__endswith=user_domain)
B) User.objects.raw(f"SELECT * FROM users WHERE email LIKE '%{user_domain}'")
C) User.objects.filter(email__endswith='%' + user_domain)
D) User.objects.raw("SELECT * FROM users WHERE email LIKE '%" + user_domain + "'")