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删除nginx缓存文件示例(python文件操作)
Mar 26 Python
Python中的exec、eval使用实例
Sep 23 Python
Python实现多线程抓取妹子图
Aug 08 Python
使用python实现ftp的文件读写方法
Jul 02 Python
解决Pycharm 导入其他文件夹源码的2种方法
Feb 12 Python
python GUI库图形界面开发之PyQt5 MDI(多文档窗口)QMidArea详细使用方法与实例
Mar 05 Python
python实现拼接图片
Mar 23 Python
解决jupyter notebook显示不全出现框框或者乱码问题
Apr 09 Python
Python 操作 PostgreSQL 数据库示例【连接、增删改查等】
Apr 21 Python
Python requests及aiohttp速度对比代码实例
Jul 16 Python
详解python方法之绑定方法与非绑定方法
Aug 17 Python
python PIL模块的基本使用
Sep 29 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
Zend Framework教程之Zend_Form组件实现表单提交并显示错误提示的方法
2016/03/21 PHP
php similar_text()函数的定义和用法
2016/05/12 PHP
PHP转换文本框内容为HTML格式的方法
2016/07/20 PHP
基于thinkPHP实现的微信自定义分享功能示例
2016/09/23 PHP
浅谈PHP中的错误处理和异常处理
2017/02/04 PHP
js控制框架刷新
2008/08/01 Javascript
jQuery '行 4954 错误: 不支持该属性或方法' 的问题解决方法
2011/01/19 Javascript
jQuery 回调函数(callback)的使用和基础
2015/02/26 Javascript
浅谈使用MVC模式进行JavaScript程序开发
2015/11/10 Javascript
js 能实现监听F5页面刷新子iframe 而父页面不刷新的方法
2016/11/09 Javascript
浅析JavaScript中作用域和作用域链
2016/12/06 Javascript
详解使用React全家桶搭建一个后台管理系统
2017/11/04 Javascript
微信小程序WebSocket实现聊天对话功能
2018/07/06 Javascript
vue仿element实现分页器效果
2018/09/13 Javascript
基于JS实现数字动态变化显示效果附源码
2019/07/18 Javascript
Node使用Nodemailer发送邮件的方法实现
2020/02/24 Javascript
[01:46]辉夜杯—打造中国DOTA新格局
2015/12/25 DOTA
Python自动连接ssh的方法
2015/03/07 Python
详解Python中find()方法的使用
2015/05/18 Python
python实现批量修改文件名代码
2017/09/10 Python
Python设计模式之桥接模式原理与用法实例分析
2019/01/10 Python
Python3删除排序数组中重复项的方法分析
2019/01/31 Python
Python 词典(Dict) 加载与保存示例
2019/12/06 Python
TensorFlow实现自定义Op方式
2020/02/04 Python
Python创建空列表的字典2种方法详解
2020/02/13 Python
Python loguru日志库之高效输出控制台日志和日志记录
2020/03/07 Python
利用Python实现斐波那契数列的方法实例
2020/07/26 Python
CSS3伪类选择器:nth-child()
2009/04/02 HTML / CSS
使用 css3 实现圆形进度条的示例
2017/07/05 HTML / CSS
html5跳转小程序wx-open-launch-weapp踩坑
2020/12/02 HTML / CSS
JSF面试题:Jsf中导航的标签是什么
2013/04/20 面试题
Python面试题:Python里面如何生成随机数
2015/03/12 面试题
个人欠款担保书
2014/05/20 职场文书
办公室个人总结
2015/02/28 职场文书
乡镇法制宣传日活动总结
2015/05/05 职场文书
Python内置的数据类型及使用方法
2022/04/13 Python