at_yasu's blog

ロード的なことを

メモ書き

ちょっと頭でまだまとまりきってないけど、メモ書き。

URLPatterns

authモジュールを使ったときの、ログインフォームの変更方法

手順としては、urls.pyにloginURLなどを書き足し、settings.pyにも一文継ぎ足す。

  • まず、urls.pyに下記のを継ぎ足す。
urlpatterns += patterns('',

	# 
	# Loginメソッド
	# URL: /login
	# template: regist/login.html
	(r'^login$',
		'django.contrib.auth.views.login',
			{'template_name':'regist/login.html'}),

	#
	# Logoutメソッド
	# URL: /logout
	# template: regist/logout.html
	(r'^logout$',
		'django.contrib.auth.views.logout',
			{'template_name':'regist/logout.html'}),

	#
	# パスワード…なんだっけ?
	# URL: /regist/password
	# template: regist/password_reset.html
	(r'^reset/password$',
		'django.contrib.auth.views.password_reset',
		  	{'template_name':'regist/password_reset.html'}),

	#
	# パスワードリセットフォーム
	# URL: /password_reset/
	# template: regist/password_reset_form.html  パスワードフォーム
	#         : regist/password_reset_email.html メールアドレスで確認するための入力欄
	(r'^password_reset/$',
		'django.contrib.auth.views.password_reset',
			{'template_name':'regist/password_reset_form.html',
			 'email_template_name':'regist/password_reset_email.html'}),

	#
	# パスワード変更受付完了フォーム
	# URL: /password_reset/done/
	# template: regist/password_reset_done.html
	(r'^password_reset/done/$',
		'django.contrib.auth.views.password_reset_done',
			{'template_name':'regist/password_reset_done.html'}),

	#
	# よぐわがんね
	(r'^reset/(?P<uidb36>[0-9A-Za-z]+)-(?P<token>.+)/$',
		'django.contrib.auth.views.password_reset_confirm',
			{'template_name':'regist/password_reset_confirm.html'}),

	#
	# 変更完了フォーム
	# URL: /reset/done/
	# template: regist/password_reset_complete.html
	(r'^reset/done/$',
		'django.contrib.auth.views.password_reset_complete',
			{'template_name':'regist/password_reset_complete.html'}),
)
  • settings.py に継ぎ足し
# auth module setting
LOGIN_URL = '/login'

UserModelを拡張

authモジュールには、UserModelが標準でついてきますが、幾分か足りない部分があります。それを補う方法。

settings.pyで設定して、アプリケーションのモデルでモデルを作成します。作成するモデルは一部分規則があるので、ご注意。

以下の例では、accountアプリケーションに、lip_userモデルをUserの拡張したものとして使います。

  • settings.py
# User's extens
AUTH_PROFILE_MODULE="account.lip_user"
  • account.lip_user
#
# Userクラス
class lip_user (models.Model):
	user = models.ForeignKey(User, unique=True)
	display_name = models.CharField(max_length=120)
	pic  = models.ImageField(upload_to='/media/user/%Y%m%d/',
							 default='/media/user/default.png')
	description = models.TextField()
	birth       = models.DateField(default=datetime.date(1989,1,1))
	is_show_birth_year = models.BooleanField(default=True)
	is_show_birth_mday = models.BooleanField(default=False)
	address            = models.ForeignKey(userAddresses)

	def __unicode__(self):
		return ("%s -- id:%s" % (self.display_name, self.user.username))

	class Meta:
		verbose_name = _('User Profile')
		verbose_name_plural = _('User Profile')
  • 利用例
from django.contrib.auth.model import User
u = User.objects.get(name='yasui')
u_profile = u.get_profile()         # 拡張した物を取得
u_profile.display_name = u"安井"    # 拡張フィールドを変更
u_profile.description = u"説明書き" # 同上
u_profile.save()                    # u.save() しても、変更したプロフィールの部分は保存してないっぽい。