一.创建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