human
Djangoフレームワークを備えたWebアプリを書いています。ユーザー向けのログイン関数を書きました。最も効率的な方法でSQL注入から入力を保護するにはどうすればよいですか？
gpt
Djangoはここでカバーしています。
生のユーザー入力をSQLクエリに挿入しないでください。常にクエリパラメーターを使用してください。Djangoはこれを非常に簡単にします。
user.objects.filter（username = username）＃危険！

user.objects.filter（username = username）＃safe、usernameはパラメーターです

だからあなたの見解では：
user.objects.get（username = request.post ['username']）＃危険
user.objects.get（username = request.post.get（ 'username'））＃safe

Djangoはユーザー名を自動的にエスケープし、SQLクエリのパラメーターとして使用して安全にします。
要するに、常にDjangoにSQLクエリを構築させ、生のユーザー入力を挿入しないでください。あなたがそうする限り、あなたはSQLインジェクションから安全になります。
human
request.post ['username]とrequest.post.get（' username '）の違いは何ですか？
gpt
それらは非常に似ていますが、1つの重要な違いがあります。

request.post ['username']は、ポストデータからユーザー名キーが欠落している場合、keyErrorをスローします。
request.post.get（ 'username'）は、キーが欠落している場合、単純に返され、エラーが発生しません。

したがって、request.post.get（ 'username'）は、ユーザー名フィールドがオプションであるか、何らかの理由で欠落している場合はより安全な選択です。
一般に、request.post.get（）を使用してフォームデータを取得して、潜在的なキーエラーの例外がスローされないようにすることをお勧めします。
human
これら2つの方法にパフォーマンスの違いはありますか？