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下利用OpenCV来旋转图像的教程
Apr 16 Python
python实现指定字符串补全空格的方法
Apr 30 Python
Python实现信用卡系统(支持购物、转账、存取钱)
Jun 24 Python
Python设计模式之抽象工厂模式
Aug 25 Python
Python读取sqlite数据库文件的方法分析
Aug 07 Python
python八皇后问题的解决方法
Sep 27 Python
python3 实现验证码图片切割的方法
Dec 07 Python
python 实现调用子文件下的模块方法
Dec 07 Python
解决Python 命令行执行脚本时,提示导入的包找不到的问题
Jan 19 Python
python儿童学游戏编程知识点总结
Jun 03 Python
Pycharm中使用git进行合作开发的教程详解
Nov 17 Python
python开发实时可视化仪表盘的示例
May 07 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编程之高级技巧——利用Mysql函数
2006/10/09 PHP
基于MySQL到MongoDB简易对照表的详解
2013/06/03 PHP
PHP数组与对象之间使用递归实现转换的方法
2015/06/24 PHP
让插入到 innerHTML 中的 script 跑起来的实现代码
2006/07/01 Javascript
JS解密入门之凭直觉解
2008/06/25 Javascript
非常棒的10款jQuery 幻灯片插件
2011/06/14 Javascript
js一般方法改写成面向对象方法的无限级折叠菜单示例代码
2013/07/04 Javascript
JS中图片缓冲loading技术的实例代码
2013/08/29 Javascript
jQuery Ajax()方法使用指南
2014/11/19 Javascript
javascript+HTML5自定义元素播放焦点图动画
2016/02/21 Javascript
Bootstrap表单布局样式源代码
2016/07/04 Javascript
jQuery Dialog 打开时自动聚焦的解决方法(两种方法)
2016/11/24 Javascript
vue调用高德地图实例代码
2017/04/28 Javascript
node.js用fs.rename强制重命名或移动文件夹的方法
2017/12/27 Javascript
Vue Element使用icon图标教程详解(第三方)
2018/02/07 Javascript
JS对象和字符串之间互换操作实例分析
2019/02/02 Javascript
判断JavaScript中的两个变量是否相等的操作符
2019/12/21 Javascript
js实现碰撞检测
2021/01/29 Javascript
[35:27]完美世界DOTA2联赛循环赛 GXR vs FTD BO2第二场 10.29
2020/10/29 DOTA
Python中的集合类型知识讲解
2015/08/19 Python
用Python实现KNN分类算法
2017/12/22 Python
Python下载网络小说实例代码
2018/02/03 Python
Django框架获取form表单数据方式总结
2020/04/22 Python
Java面试题:请问一下代码输出是什么
2015/05/27 面试题
企业办公室主任岗位职责
2014/02/19 职场文书
厂办主管岗位职责范本
2014/02/28 职场文书
农民工工资发放承诺书
2014/03/31 职场文书
绿色家庭事迹材料
2014/05/01 职场文书
贷款委托书怎么写
2014/08/02 职场文书
毕业生实习证明
2014/09/19 职场文书
八达岭长城导游词
2015/01/30 职场文书
音乐教师个人工作总结
2015/02/06 职场文书
《三国志》赏析
2019/08/27 职场文书
Html分层的box-shadow效果的示例代码
2021/03/30 HTML / CSS
InterProcessMutex实现zookeeper分布式锁原理
2022/03/21 Java/Android
zabbix配置nginx监控的实现
2022/05/25 Servers