LoginSignup
3
9

More than 3 years have passed since last update.

Djangoでwebサービスを作ってみた振り返り1

Last updated at Posted at 2019-12-01

Djangoでwebサービスを作ってみました。完成はしましたが、ふんわりやっていたところを再度調べました。

models.pyで使ったあれこれ

例:

class Profile(models.Model):
    ~~フィールド定義省略~~

    @receiver(post_save, sender=User)
    def create_profile(sender, **kwargs):
        if kwargs['created']:
            user_profile = Profile.objects.get_or_create(user=kwargs['instance'])

    def __str__(self):
        return str(self.user)

@receiver

@receiverはシグナルというもので、イベントが発生したタイミングで登録した処理を呼び出す機能。
この例で使われたpost_saveは、senderで指定したモデル(ここではUser)に対するレコードの 追加 or 変更 をした 直後に実行されることを意味する。

**kwargs

kwargsのようにをつけた引数を定義すると、任意の数のキーワード引数を指定することができる。
関数の中では引数名がキーkey、値がvalueとなる辞書として受け取られる。
この例では、引数に送信者とこれを取り、if文でインスタンスが作成されたかを確認します。

get_or_create

オブジェクトが存在しなければ登録、存在してれば登録しない。

def str(self)

インスタンスにstrやprintを適用すると呼び出される処理

forms.pyで使ったあれこれ

例:

class CommentCreateForm(forms.ModelForm):

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        for field in self.fields.values():
            field.widget.attrs['class'] = 'form-control'

    class Meta:
        model = Comment
        fields = ('text',)

*args

可変長引数をtuple型で取るかdict型で取るかって意味です
*argsはtuple型
**kwargsはdict型
参考

class Meta

class Metaはフィールド定義じゃないものを定義する場です。
※フィールドはデータベースに登録される要素の事。
今回の例では、UserCreateFormのmodelとfieldsを定義しています。
fieldsではModelから入力フォームを生成する対象を定義しています。

3
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
9