一.创建app
django-admin.py startapp userprofile
二.在settings.py中添加app
二.添加userprofile/models.py的内容如下
from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver
import logging
logr = logging.getLogger(__name__)
class UserProfile(models.Model):
user = models.OneToOneField(User)
likes_cheese = models.BooleanField()
favourite_hamster_name = models.CharField(max_length=50)
User.profile = property(lambda u: UserProfile.objects.get_or_create(user=u)[0])
@receiver(post_save, sender=User)
def make_sure_user_profile_is_added_on_user_created(sender, **kwargs):
if kwargs.get('created', False):
up = UserProfile.objects.create(user=kwargs.get('instance'))
logr.debug("UserProfile created: %s" % up)
三.修改userprofile/forms.py的内容如下
from django import forms
from models import UserProfile
class UserProfileForm(forms.ModelForm):
class Meta:
model = UserProfile
fields = ('likes_cheese', 'favourite_hamster_name')
四.修改userprofile/templates/profile.html的内容如下
{% extends "base.html" %}
{% block content %}
<h2>Profile</h2>
{% for field in form %}
{{field.error}}
{% endfor %}
<form action="/accounts/profile/" method="post">{% csrf_token %}
{{form.as_ul}}
<input type="submit" value="Update" />
</form>
{% endblock %}
五.修改userprofile/urls.py的内容如下
from django.conf.urls import patterns, include, url
urlpatterns = patterns('',
url(r'^profile/$', 'userprofile.views.user_profile'),
)
六.修改django_test/urls.py的内容如下
七.修改userprofile/views.py的内容如下
from django.shortcuts import render_to_response
from django.http import HttpResponseRedirect
from django.core.context_processors import csrf
from forms import UserProfileForm
from django.contrib.auth.decorators import login_required
@login_required
def user_profile(request):
if request.method == 'POST':
form = UserProfileForm(request.POST, instance=request.user.profile)
if form.is_valid():
form.save()
return HttpResponseRedirect('/accounts/loggedin')
else:
user = request.user
profile = user.profile
form = UserProfileForm(instance=profile)
args = {}
args.update(csrf(request))
args['form'] = form
return render_to_response('profile.html', args)
八.修改django_test/templates/loggedin.html的内容如下
{% extends "base.html" %}
{% block content %}
<h2>Hi {{full_name}} you are now logged in!</h2>
<p>Click <a href="/accounts/logout/">here</a> to logout.</p>
<p>Click <a href="/accounts/profile/">here</a> to edit your profile information</p>
{% endblock %}
./manage.py migrate效果如图
修改database
./manage.py migrate