実際の開発では、我々は多くの場合、データベースにチェックインした後、利用者から提出された運用データに遭遇します。
Customerテーブルにフォームの送信データを投稿するユーザーフォームを仮定し、受信した背景データは、多くの場合、処理することにより行われます。
# 将csrf校验的键值对去除
request.POST.pop("csrfmiddlewaretoken")
# 以打散的方式将数据传入数据库的表中
Customer.objects.update_or_create(**request.POST)
私たちが知っている、request.POSTは、QueryDict
実際にはそれが習慣で、ターゲット字典
ことに注意することは、時間を変更するだけでなく、不可变特性
私たちは辞書として使用することができたときにパラメータを渡す時以外を。
しかし、また、それがこの「別れる」アプローチは、質量参加必要であることを指摘し字典
、すべての内のが、key
データベースフィールド内のテーブルの名前と一致していなければなりません!それ以外の場合は、パラメータの受け渡しは、エラーが発生したときに!
辞書散乱パラメータ渡しのメカニズムを説明するための小さなデモ
そこで質問です:これは打散
、それが何であるかのメカニズム方法はありますか?
次の例を考えてみます。
def func(username,password):
global count
print(count,username,password)
count += 1
if __name__ == '__main__':
count = 1
dic = {"username":'whw','password':123}
# 打散传参与位置参数传参
func(**dic)
func(username='whw',password=123)
次のような結果の実装は以下のとおりです。
1 whw 123
2 whw 123
まず、関数を定義してみましょうfunc
2つの位置パラメータのユーザ名とパスワードがあり、その後、辞書を定義しdic={"username":"whw","password":123}
、カウンタとして使用する変数を数えます。
我々は機能を実行するときに、funcがパラメータを渡すには二つの方法を使用:一種類だけ**dic
殴らDIC、ある道を、;他のパラメータを渡すための従来の方法です。
両方の方法が正常に行わ二上述の伝送パラメータは、と等価です!
言い換えれば、**dic
辞書は打散
の一つとなったkey=value
形!
また、必要がポイントに特別な注意を払う:辞書のためのこのパラメータの受渡しモードキーは位置パラメータ関数の値と一致する必要があり、辞書は殴られたキーの値を要求され、それ以外のプログラムが文句を言うでしょう!