google(五)User Module

本文介绍如何使用Django框架搭建应用,并实现用户注册、登录及退出功能。包括安装必要的插件、创建应用程序、配置中间件及设置URL等步骤。
google(五)User Module

1. prepare work:
install Eclipse YAML Editor plugin:
http://www.symfony.pl/yamleditor

I create a project named 4wargame, and svn import to my repository,command>
svn import 4wargame/ https://sillycat.googlecode.com/svn/trunck/4wargame --username=4myhappylife@gmail.com --password=xxxxx

2. create app
Create app named registration for account management.
Create app named portal for the front page of my application.

Modified the settings.py at the root of the project:
MIDDLEWARE_CLASSES = (
'ragendja.middleware.ErrorMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
# Django authentication
#'django.contrib.auth.middleware.AuthenticationMiddleware',
# Google authentication
#'ragendja.auth.middleware.GoogleAuthenticationMiddleware',
# Hybrid Django/Google authentication
'ragendja.auth.middleware.HybridAuthenticationMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.locale.LocaleMiddleware',
'ragendja.sites.dynamicsite.DynamicSiteIDMiddleware',
'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware',
'django.contrib.redirects.middleware.RedirectFallbackMiddleware',
)

AUTH_USER_MODULE = 'ragendja.auth.hybrid_models'
GLOBALTAGS = ('ragendja.templatetags.googletags',)

LOGIN_URL = '/registration/login/'
LOGOUT_URL = '/registration/logout/'
LOGIN_REDIRECT_URL = '/portal/'

INSTALLED_APPS = (
# Add jquery support (app is in "common" folder). This automatically
# adds jquery to your COMBINE_MEDIA['combined-%(LANGUAGE_CODE)s.js']
# Note: the order of your INSTALLED_APPS specifies the order in which
# your app-specific media files get combined, so jquery should normally
# come first.
'jquery',

# Add blueprint CSS (http://blueprintcss.org/)
#'blueprintcss',
'django.contrib.auth',
'django.contrib.sessions',
#'django.contrib.admin',
'django.contrib.webdesign',
'django.contrib.flatpages',
'django.contrib.redirects',
'django.contrib.sites',
'appenginepatcher',
'ragendja',
'mediautils',
'registration',
'portal',
)

Modified the urls.py file at the root of project:
urlpatterns = auth_patterns + patterns('',
(r'^registration/', include('registration.urls')),
(r'^portal/', include('portal.urls')),
(r'^$', 'django.views.generic.simple.direct_to_template',
{'template': 'main.html'}),
) + urlpatterns

my template file templates/base.html :
<html>
<body>
{% load googletags %}
<div>
{% if user.is_authenticated %}
Welcome, {{ user.username }}!
{% if user.is_active %}
<a href="/registration/logout">
{% else %}
<a href="{% google_logout_url "/registration/login" %}">
{% endif %}Logout</a>
{% else %}
<a href="{% google_login_url "/registration/login" %}">Login with your Google account</a>
<a href="/registration/login">Login with normal account</a>
<a href="/registration/signup">Create your normal account</a><br>
{% endif %}
</div>
<div>
{% block content %}{% endblock %}
</div>
</body>
</html>

the views.py controller of portal app:
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
from django.shortcuts import render_to_response
from django.http import HttpResponseRedirect
from django.contrib.auth.decorators import login_required
from django.views.generic.list_detail import object_list, object_detail
from django.views.generic.create_update import create_object


@login_required
def main(request):
#print request.user.username
return render_to_response('portal/main.html',{"user":request.user})

@login_required means that if you want to access this method, we need you to logon the system.

urls.py for registration app:
# -*- coding: utf-8 -*-
from django.conf.urls.defaults import *
from ragendja.urlsauto import urlpatterns
from ragendja.auth.urls import urlpatterns as auth_patterns
from django.contrib import admin

urlpatterns = patterns('',
(r'^$', 'django.contrib.auth.views.login', {'template_name': 'registration/user_form.html'}),
(r'^signup/$', 'registration.views.create_new_user'),
(r'^login/$', 'django.contrib.auth.views.login', {'template_name': 'registration/login.html'}),
(r'^logout/$', 'django.contrib.auth.views.logout', {'template_name': '/registration/logged_out.html'}),
)

login, logout, and registe method, views.py controller:
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
from django.shortcuts import render_to_response
from django.http import HttpResponseRedirect
from django.contrib.auth.decorators import login_required
from django.views.generic.list_detail import object_list, object_detail
from django.views.generic.create_update import create_object

def create_new_user(request):
form = UserCreationForm()
# if form was submitted, bind form instance.
if request.method == 'POST':
form = UserCreationForm(request.POST)
if form.is_valid():
user = form.save(commit=False)
# user must be active for login to work
user.is_active = True
user.put()
return HttpResponseRedirect('/portal/')
return render_to_response('registration/user_form.html', {'form': form})

the pages for the 3 function are customised and as follow
logged_out.html:
{% extends "base.html" %}
{% block title %}Login{% endblock %}
{% load googletags %}

{% block content %}
<h1>Logout page: logged_out.html</h1>

You logout ! Thanks for visit our page.

{% endblock content %}

login.html:
{% extends "base.html" %}
{% block title %}Login{% endblock %}
{% load googletags %}

{% block content %}
<h1>Login page: login.html</h1>

<form action="{{ request.get_full_path }}" method="post">
<table>{{ form }}</table>
<input type="submit" value="Login" />
</form>

{% endblock content %}

user_form.html:
{% extends "base.html" %}
{% block title %}Login{% endblock %}
{% load googletags %}

{% block content %}
<h1>Registration page: user_form.html</h1>
<form action="." method="post">
<table>
{{ form.as_table }}
</table>
You can also login with your <a href="{% google_login_url "/registration/login" %}">Google account.</a>
<input type="submit" value="submit">
</form>

{% endblock content %}

It is my user management module for my demo system.

3 Other references:
method One- google account
document URL: http://code.google.com/intl/zh-CN/appengine/docs/python/users/overview.html

method Two- google appengine patch
error code:
SMTPServerDisconnected at /account/register/
solution:
send email error: python manage.py runserver --enable_sendmail

google django
http://gae-django-cms.appspot.com/article/571003/gae-django-cms
http://code.google.com/intl/zh-CN/appengine/articles/app-engine-patch.html

get current users:
http://gae-django-cms.appspot.com/article/575004/django%E8%8E%B7%E5%8F%96%E5%BD%93%E5%89%8D%E7%94%A8%E6%88%B7
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值