Djangoで構築されたWebサイトで一意の電子メールアドレスを強制的に登録する簡単な方法はありますか? 私はいくつかの "アドオン"を見ましたか? HMACのようなものですが、私が達成しようとしているものはあまりにも複雑すぎるようです。Djangoの登録時に一意のEメールアドレスを強制する
また、ドメインのリストからの登録だけを受け入れることは可能でしょうか? (「@ google.com」からのメールのみ)
Djangoで構築されたWebサイトで一意の電子メールアドレスを強制的に登録する簡単な方法はありますか? 私はいくつかの "アドオン"を見ましたか? HMACのようなものですが、私が達成しようとしているものはあまりにも複雑すぎるようです。Djangoの登録時に一意のEメールアドレスを強制する
また、ドメインのリストからの登録だけを受け入れることは可能でしょうか? (「@ google.com」からのメールのみ)
AbstractUser
クラスを自分のクラスのMyUser
に拡張し、デフォルトを変更することで同じ問題が解決しました。
このクラスをすべてのマイユーザのデフォルトモデルクラスとしてMyUser
にすることで、このプロパティ(ユニークなEメール)をウェブアプリケーションのすべてのユーザに適用できます。
アプリを作成myuserそこmodels.pyで:
from django.contrib.auth.models import AbstractUser
#create your own user class.
class MyUser(AbstractUser):
def __init__(self, *args, **kwargs):
self._meta.get_field('email').blank = False
self._meta.get_field('email')._unique = True
super(MyUser, self).__init__(*args, **kwargs)
#Changed the defaults above.
#Give any additional field you want to associate your user with.
注:AbstractUserがすでにユーザーモデルを持っているしたいすべての基本的なフィールドがあります。たとえば、ユーザー名、パスワード、電子メールなどです。すべてhereを確認してください。
あなたがしたいと思う最後の事は、これがデフォルトのユーザーは、ウェブアプリケーションに関連付けられていることを確認しますあなたのsetting.py
AUTH_USER_MODEL = 'myuser.MyUser'
をして、以下を追加している拡張(修正)MyUser
クラスがあります。これは、djangoが提供するすべての基本機能をUser
に提供します。
request.user
など私はあなたの形でいくつかの追加のコードを(必要があるかもしれないことを提案したいです.pyとviews.py)を使用して、このタイプのクラスを通してユーザーを作成します。あなたがそれを管理することを願っています。これは正しい方向にあなたを導くのに十分なはずです。
多分ライブラリが助けになりましたが、電子メールのドメインにも認証が必要なので、これはすべきことだと思います。私の謙虚な意見では、他のすべての機能のために第三者図書館に常に依存することはできません。
最後に、は@ gmail.comや@ outlook.comのようなドメインからしか来ないユーザーを認証するため、djangoフォームのクリーンメソッドで簡単にチェックすることができます。私はあなたがdjango形式を扱う方法を知っていることを願っています。そうでない場合は、公式ドキュメントでそれらについて学ぶことができます。彼らはDjangoの不可欠な部分です。
あなたはこのロジックにEメールをチェックすることができます。
email = self.cleaned_data['email']
email_source = email.split('@')[-1]
#email_source will now have values like: gmail.com, outlook.com etc
#you can now validate email_source now like:
permitted_sources = ['gmail.com' , 'outlook.com' , ]
if email_source in permitted_sources:
return cleaned_data
else:
raise forms.ValidationError('Error Message')
#Note: This logic should be kept in your clean method.
私はこれがあなたをガイド願っています。ありがとう。
今はガイドです!親切にありがとう!できるだけ早く働きます。 – willer2k