ユーザープロフィール
シリーズの今日の部分では、我々はプロファイルの画像などの追加情報を含むことによって、ユーザーのプロファイルを作成するつもりだとバイオ.
まず、ビュー内のプロファイルビューを作成できます.パイ
ビューパイ
後でこのビューを変更して、ユーザーにプロファイルを更新させます. The ログインしていないユーザーはプロフィールページにアクセスできません.ユーザがそうしようとするならば、 この例のパスからわかるように、この関数はユーザがアクセスしようとしているページを追跡します.したがって、それは、彼らが成功した認証の後、最初の場所に尋ねたプロフィールページに、ユーザーをリダイレクトします. オープンユーザーアプリのURL.Pyとプロファイルビューのルートを追加します.
ユーザー/URL.パイ
プロファイル.HTML
このテンプレートを後でユーザーのプロフィールを表示するように変更しますが、まず最初に必要なことがあります.
1対1リンクを用いたユーザモデルの拡張
それは私たちのプロファイルをモデル化するために、ユーザーのプロファイル画像とバイオフィールドがデータベースに格納されるようになるまでの時間です.
認証に関連していないユーザについての追加情報を保存したい場合は、ユーザと1対1のリンクを持つ新しいモデルを作成することができます.
Djangoでは、私たちは 一対一の関係において、テーブルの1つのレコードは、外部キーを使用している1つのレコードおよび他のテーブルの1つのレコードだけに関連付けられる.例-ユーザーモデルインスタンスは1つのプロファイルインスタンスのみに関連付けられます. 2つのフィールド、アバター(プロフィール写真)とバイオでプロファイルモデルを作成しましょう.必要に応じて追加できます.
モデル.パイ
最初の引数 最初の引数 Bioは、ユーザーに関するいくつかの情報が格納されているテキストフィールドです. ダンク 大丈夫、この仕事をするために必要なライブラリがあります.これまでのPythonでのイメージで働いた?もしそうなら、おそらく知っている
Djangoは私たちがこのライブラリを つの他の重要なステップは、ユーザーモデル管理者の中にプロフィールモデルを登録することです.Py 管理.パイ
上記のコードはプロファイルモデルをインポートし これで管理パネルにログインし、作成したモデルを見ることができます.
ユーザーのアップロードされたファイル
Djangoのメディアファイルで作業するときは、ローカルにファイルを保存し、必要に応じてそれらを提供するためにいくつかの設定を変更する必要があります.
特に設定でMediaRange URLとMediaHorseルートを設定する必要があります. 設定.パイ
UserRange管理/URL.パイ
上記のイメージからわかるように、ユーザーがアップロードするプロフィール写真は中で生きます ユーザーに与えられたデフォルトのプロファイル画像
ジャンゴの信号
ユーザーが作成されるたびに、プロファイルページを作成するために管理ページに行かなければならないことに注意してください.新しいユーザーが作成されるとき、我々がプロフィールを自動的につくることができるならば、それは素晴らしいです.これを行うにはシグナルを使います.
しかし、信号は?
シグナルはデータベースの特定のエントリの変更/作成に何らかの動作を実行するために使用されます.
信号では、次の基本的な概念があります.
送付者:通常、イベントが起こるとき、受信機に通知するモデルです.
受信機:通常、受信機は、ユーザインスタンスがちょうどデータベースの中でちょうど保存されることになっているとき、例えば、それが起こった若干の行動の通知されると、データの上で働く機能です. 送付者と受信機の間の接続は、「信号発送係」を通してされます. 使用します:-シグナルを使用すると、新しいユーザーインスタンスがデータベース内に作成されたときに、プロファイルのインスタンスの右を作成できます.
DJangoは、単一のモジュールとしてアプリケーションのディレクトリに信号を置くことをお勧めします.したがって、シグナルを作成します.ユーザーアプリ内のPYファイル.
シグナルパイ
ユーザーは、通知を行う責任がある送信者です. 一般的に、上記のコードはユーザーモデル 次のステップは、受信機を
アプリ.パイ
私たちがしたことは 我々がベルトの下で上記のものを持っている今、我々はユーザーが彼らのプロフィールを更新して、テンプレートの中に情報を示すフォームを作成します.
あなたが完成アプリを見つけることができますgithub .
任意のコメントや提案を歓迎します.
まず、ビュー内のプロファイルビューを作成できます.パイ
ビューパイ
from django.shortcuts import render
from django.contrib.auth.decorators import login_required
@login_required
def profile(request):
return render(request, 'users/profile.html')
login_required
デコレータはログインしたユーザーへのアクセスを制限します.login_required()
ウィルリダイレクト彼/彼女にsettings.LOGIN_URL
問い合わせの文字列に現在の絶対パスを渡します.例:/login/?next=/profile/
ユーザー/URL.パイ
from django.urls import path
from .views import profile
urlpatterns = [
# Add this
path('profile/', profile, name='users-profile'),
]
ユーザーアプリケーションテンプレートディレクトリ内のビューのテンプレートを作成します.プロファイル.HTML
{% extends "users/base.html" %}
{% block title %}Profile Page{% endblock title %}
{% block content %}
<div class="row my-3 p-3">
<h1>This is the profile page for {{user.username}}</h1>
</div>
{% endblock content %}
1対1リンクを用いたユーザモデルの拡張
それは私たちのプロファイルをモデル化するために、ユーザーのプロファイル画像とバイオフィールドがデータベースに格納されるようになるまでの時間です.
認証に関連していないユーザについての追加情報を保存したい場合は、ユーザと1対1のリンクを持つ新しいモデルを作成することができます.
Djangoでは、私たちは
OneToOneField
モデルフィールド.モデル.パイ
from django.db import models
from django.contrib.auth.models import User
# Extending User Model Using a One-To-One Link
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
avatar = models.ImageField(default='default.jpg', upload_to='profile_images')
bio = models.TextField()
def __str__(self):
return self.user.username
OneToOneField
現在のモデルがどのモデルに関連するかを指定します.二番目の引数on_delete=models.CASCADE
ユーザーが削除された場合、同様に彼/彼女のプロファイルを削除することを意味します.ImageField
, default='default.jpg'
ユーザーが自分自身をアップロードしない場合は、デフォルトのイメージを使用します.二番目の引数upload_to='profile_images'
画像がアップロードされるディレクトリです.__str__
メソッドは、プロファイルのインスタンスがプリントアウトされたときにオブジェクトを文字列表現に変換します.それで、我々がユーザーのプロフィールを印刷するときはいつでも、それは彼/彼女のユーザー名を表示します.pillow
これはPythonで画像の操作を行うことができる最も一般的な画像処理ライブラリの一つです.Djangoは私たちがこのライブラリを
ImageField
, そのため、次のように入力してください.pip install pillow
変更は、データベース内の効果を取るためには、移動を実行しましょう.python manage.py makemigrations
python manage.py migrate
from django.contrib import admin
from .models import Profile
admin.site.register(Profile)
admin.site.register
登録する.ユーザーのアップロードされたファイル
Djangoのメディアファイルで作業するときは、ローカルにファイルを保存し、必要に応じてそれらを提供するためにいくつかの設定を変更する必要があります.
特に設定でMediaRange URLとMediaHorseルートを設定する必要があります.
MEDIA_ROOT
アップロードされたファイルが格納されるディレクトリへのフルパスです.通常、プロジェクトのベースディレクトリ内にディレクトリを作成することによってそのようなファイルを保存します.MEDIA_URL
ベースURLはメディアファイルを提供します.これは私たちのWebブラウザを介してメディアにアクセスすることができますです.MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
プロジェクトのURLを設定します.ユーザが提供するPYは、開発中にメディアファイルをアップロードしました.UserRange管理/URL.パイ
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
# ...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
これで、メディアルートフォルダにファイルを追加できます./media/profile_images/your_image
. 我々は、使用を使用してフロントエンドを作成するまで写真をアップロードするには、管理パネルに行くことができますし、登録されているユーザーのイメージを作成するすべての場合はうまく動作しているかどうかを確認します./media/
したがって、このディレクトリの中に名前を付けたい任意のデフォルトイメージを入れてくださいdefault.jpg
. ジャンゴの信号
ユーザーが作成されるたびに、プロファイルページを作成するために管理ページに行かなければならないことに注意してください.新しいユーザーが作成されるとき、我々がプロフィールを自動的につくることができるならば、それは素晴らしいです.これを行うにはシグナルを使います.
しかし、信号は?
シグナルはデータベースの特定のエントリの変更/作成に何らかの動作を実行するために使用されます.
信号では、次の基本的な概念があります.
送付者:通常、イベントが起こるとき、受信機に通知するモデルです.
受信機:通常、受信機は、ユーザインスタンスがちょうどデータベースの中でちょうど保存されることになっているとき、例えば、それが起こった若干の行動の通知されると、データの上で働く機能です.
DJangoは、単一のモジュールとしてアプリケーションのディレクトリに信号を置くことをお勧めします.したがって、シグナルを作成します.ユーザーアプリ内のPYファイル.
シグナルパイ
from django.db.models.signals import post_save
from django.contrib.auth.models import User
from django.dispatch import receiver
from .models import Profile
@receiver(post_save, sender=User)
def create_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)
@receiver(post_save, sender=User)
def save_profile(sender, instance, **kwargs):
instance.profile.save()
create_profile
ユーザーが作成されるたびに実行される受信機関数です.post_save
はsaveメソッドの最後に送られるシグナルです.save()
メソッドが実行を終了した場合、シグナルを送信します(post_save
) 受信関数(create_profile
) 次に、この関数は、そのユーザーのプロファイルインスタンスを作成して保存するためのシグナルを受け取ります.ready()
信号モジュールをインポートすることにより、アプリケーションの設定の方法.オープンアプリ.Pyのユーザーアプリケーションの任意のアプリケーション構成を含めることができます.アプリ.パイ
from django.apps import AppConfig
class UserConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'users'
# add this
def ready(self):
import users.signals # noqa
ready()
ユーザ登録アプリケーションの方法.あなたが完成アプリを見つけることができますgithub .
任意のコメントや提案を歓迎します.
Reference
この問題について(ユーザープロフィール), 我々は、より多くの情報をここで見つけました https://dev.to/earthcomfy/django-user-profile-3hikテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol