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插入排序算法的实现代码
Nov 21 Python
python正则表达式re模块详解
Jun 25 Python
Python中asyncore异步模块的用法及实现httpclient的实例
Jun 28 Python
PyQt5利用QPainter绘制各种图形的实例
Oct 19 Python
python字典快速保存于读取的方法
Mar 23 Python
python3+PyQt5自定义视图详解
Apr 24 Python
Python常见的pandas用法demo示例
Mar 16 Python
python2和python3在处理字符串上的区别详解
May 29 Python
Python numpy线性代数用法实例解析
Nov 15 Python
Python3爬虫中Ajax的用法
Jul 10 Python
python中的unittest框架实例详解
Feb 05 Python
Python获取指定日期是"星期几"的6种方法
Mar 13 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中使用XML
2006/10/09 PHP
PHP分页类集锦
2014/11/18 PHP
PHP数学运算与数据处理实例分析
2016/04/01 PHP
PHP读取CSV大文件导入数据库的实例
2017/07/24 PHP
PDO::errorCode讲解
2019/01/28 PHP
一个判断email合法性的函数[非正则]
2008/12/09 Javascript
JQuery 初体验(建议学习jquery)
2009/04/25 Javascript
基于jquery实现的服务器验证控件的启用和禁用代码
2010/04/27 Javascript
JS中获取数据库中的值的方法
2013/07/14 Javascript
javascript计时器编写过程与实现方法
2016/02/29 Javascript
H5用户注册表单页 注册模态框!
2016/09/17 Javascript
js文件中直接alert()中文出来的是乱码的解决方法
2016/11/01 Javascript
详解前端路由实现与react-router使用姿势
2017/08/07 Javascript
JS实现手写parseInt的方法示例
2017/09/24 Javascript
web前端开发中常见的多列布局解决方案整理(一定要看)
2017/10/15 Javascript
快速解决vue-cli不能初始化webpack模板的问题
2018/03/20 Javascript
解决ng-repeat产生的ng-model中取不到值的问题
2018/10/02 Javascript
详解@Vue/Cli 3 Invalid Host header 错误解决办法
2019/01/02 Javascript
js中事件对象和事件委托的介绍
2019/01/21 Javascript
Vue组件间通信 Vuex的用法解析
2019/08/05 Javascript
在vue中阻止浏览器后退的实例
2019/11/06 Javascript
Node.js设置定时任务之node-schedule模块的使用详解
2020/04/28 Javascript
基于jquery实现彩色投票进度条代码解析
2020/08/26 jQuery
python中requests和https使用简单示例
2018/01/18 Python
Python列表list常用内建函数实例小结
2019/10/22 Python
使用python的turtle绘画滑稽脸实例
2019/11/21 Python
Numpy将二维数组添加到空数组的实现
2019/12/05 Python
html5 postMessage解决跨域、跨窗口消息传递方案
2016/12/20 HTML / CSS
机电专业个人求职信范文
2013/12/30 职场文书
2014向国旗敬礼网上签名活动总结
2014/09/27 职场文书
付款委托书范本
2014/10/05 职场文书
社区学习党的群众路线教育实践活动心得体会
2014/11/03 职场文书
2014年酒店工作总结与计划
2014/11/17 职场文书
致运动员加油稿
2015/07/21 职场文书
2016年社区国庆节活动总结
2016/04/01 职场文书
Python排序算法之插入排序及其优化方案详解
2021/06/11 Python