Python的Django中django-userena组件的简单使用教程


Posted in Python onMay 30, 2015

利用twitter/bootstrap,项目的基础模板算是顺利搞定。接下来开始处理用户中心。

用户中心主要包括用户登陆、注册以及头像等个人信息维护。此前,用户的注册管理我一直使用django-registration。只是这个APP有些不思进取,09年发布了0.8alpha版后就一直没什么动静。这次决定尝试另外一个用户模块组件django-userena。

相比django-registration,django-userena的功能要完善的多。除基础的登陆注册模块外django-userena甚至还带了站内消息功能。django-userena的易用性方面也做的非常的不错。django-userena自带了默认模板,并有提供一个完整的演示项目,让你可以轻松上手。这里有个官方的在线demo,感兴趣可以去看看。
django-userena同twitter/bootstrap的整合

我们自然是希望所有的APP不用做任何修改,拿来就能用了。不过事与愿违,在整合的过程中多多少少都会遇到一些问题。django-userena默认的模板在项目中显示的非常难看。我们需要重写django-userena的默认模板,并且用django-bootstrap来生成form。

forms.py
#为原始form添加BootstrapMixin
from bootstrap.forms import BootstrapMixin

class BsAuthenticationForm(AuthenticationForm, BootstrapMixin):
 def __init__(self, *args, **kw):
  super(BsAuthenticationForm, self).__init__(*args, **kw)
  self.__bootstrap__()
 
urls.py
#重写urls,指定使用的form
from django.conf.urls.defaults import *
from userena import views as userena_views
from profiles.forms import BsSignupForm, BsAuthenticationForm

urlpatterns = patterns('',
 url(r'^signup/$', userena_views.signup,
  {'signup_form': BsSignupForm}, name='userena_signup'),
 url(r'^signin/$', userena_views.signin,
  {'auth_form': BsAuthenticationForm}, name='userena_signin'),
 (r'^', include('userena.urls')),
)

中文用户名问题

同django-admin一样,django-userena也无法使用中文进行注册。对于一个中文网站而言,不能使用中文注册ID似乎有些太不合理的。

django-userena使用正则表达式对用户名进行校验,重写注册form修改认证规则即可取消该限制。

USERNAME_RE = r'^\S+$'
attrs_dict = {'class': 'required'}

class BsSignupForm(SignupForm, BootstrapMixin):
 username = forms.RegexField(regex=USERNAME_RE,
        max_length=30,
        widget=forms.TextInput(attrs=attrs_dict),
        label=_("Username"),
        error_messages={'invalid': _('Username must contain only letters, numbers, dots and underscores.')})

 def __init__(self, *args, **kw):
  super(BsSignupForm, self).__init__(*args, **kw)
  self.__bootstrap__()
Python 相关文章推荐
python输出指定月份日历的方法
Apr 23 Python
python实现同时给多个变量赋值的方法
Apr 30 Python
python字典排序实例详解
May 20 Python
Python2.7基于淘宝接口获取IP地址所在地理位置的方法【测试可用】
Jun 07 Python
Python如何快速上手? 快速掌握一门新语言的方法
Nov 14 Python
Python基于贪心算法解决背包问题示例
Nov 27 Python
django 修改server端口号的方法
May 14 Python
Python json模块dumps、loads操作示例
Sep 06 Python
用Python识别人脸,人种等各种信息
Jul 15 Python
python 自定义装饰器实例详解
Jul 20 Python
如何利用python给图片添加半透明水印
Sep 06 Python
python-OpenCV 实现将数组转换成灰度图和彩图
Jan 09 Python
在SAE上部署Python的Django框架的一些问题汇总
May 30 #Python
python实现比较两段文本不同之处的方法
May 30 #Python
python统计文本文件内单词数量的方法
May 30 #Python
python使用win32com库播放mp3文件的方法
May 30 #Python
基于wxpython开发的简单gui计算器实例
May 30 #Python
python图像处理之镜像实现方法
May 30 #Python
python图像处理之反色实现方法
May 30 #Python
You might like
php抓取页面的几种方法详解
2013/06/17 PHP
PHP获取当前页面URL函数实例
2014/10/22 PHP
Centos下升级php5.2到php5.4全记录(编译安装)
2015/04/03 PHP
CodeIgniter视图使用注意事项
2016/01/20 PHP
PHP命名空间定义与用法实例分析
2019/08/14 PHP
模拟jQuery ajax服务器端与客户端通信的代码
2011/03/28 Javascript
裁剪字符串trim()自定义改进版
2013/04/10 Javascript
jQuery中extend()和fn.extend()方法详解
2015/06/03 Javascript
jQuery中的ajax async同步和异步详解
2015/09/29 Javascript
JavaScript学习笔记之取数组中最大值和最小值
2016/03/23 Javascript
第一次接触神奇的Bootstrap基础排版
2016/07/26 Javascript
使用React实现轮播效果组件示例代码
2016/09/05 Javascript
详解js的异步编程技术的方法
2017/02/09 Javascript
基于BootStrap的前端分页带省略号和上下页效果
2017/05/18 Javascript
微信小程序 行的删除和增加操作实现详解
2019/09/29 Javascript
微信js-sdk 录音功能的示例代码
2019/11/01 Javascript
vue实现简单跑马灯效果
2020/05/25 Javascript
layui使用及简单的三级联动实现教程
2020/12/01 Javascript
[02:04]2014DOTA2国际邀请赛 BBC小组赛第三天总结
2014/07/12 DOTA
[02:41]辉夜杯现场一家三口 “我爸玩风行 我玩血魔”
2015/12/27 DOTA
python斐波那契数列的计算方法
2018/09/27 Python
Apache,wsgi,django 程序部署配置方法详解
2019/07/01 Python
python selenium 获取接口数据的实现
2020/12/07 Python
基于Python-turtle库绘制路飞的草帽骷髅旗、美国队长的盾牌、高达的源码
2021/02/18 Python
浅析两列自适应布局的3种思路
2016/05/03 HTML / CSS
CSS Grid布局教程之浏览器开启CSS Grid Layout汇总
2014/12/30 HTML / CSS
公务员职务工作的自我评价
2013/11/01 职场文书
幼儿园英语教学反思
2014/01/30 职场文书
付款委托书范本
2014/04/04 职场文书
分公司负责人任命书
2014/06/04 职场文书
助残日活动总结
2014/08/27 职场文书
自查自纠整改报告
2014/11/06 职场文书
2014年创卫工作总结
2014/11/24 职场文书
期中考试复习计划
2015/01/19 职场文书
证婚人婚礼致辞
2015/07/28 职场文书
学生会自荐信
2019/05/16 职场文书