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 相关文章推荐
Pyramid添加Middleware的方法实例
Nov 27 Python
理解Python中的With语句
Feb 02 Python
简单的Python的curses库使用教程
Apr 11 Python
Python中的条件判断语句与循环语句用法小结
Mar 21 Python
Django中反向生成models.py的实例讲解
May 30 Python
python排序函数sort()与sorted()的区别
Sep 18 Python
pyqt5中QThread在使用时出现重复emit的实例
Jun 21 Python
Django结合ajax进行页面实时更新的例子
Aug 12 Python
pytorch模型存储的2种实现方法
Feb 14 Python
Django实现从数据库中获取到的数据转换为dict
Mar 27 Python
python怎么提高计算速度
Jun 11 Python
python设置 matplotlib 正确显示中文的四种方式
May 10 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
模拟xcopy的函数
2006/10/09 PHP
如何使用脚本模仿登陆过程
2006/11/22 PHP
php mysql数据库操作分页类
2008/06/04 PHP
php 攻击方法之谈php+mysql注射语句构造
2009/10/30 PHP
PHP 向右侧拉菜单实现代码,测试使用中
2009/11/03 PHP
PHP fgetcsv 定义和用法(附windows与linux下兼容问题)
2012/05/29 PHP
jQuery向下滚动即时加载内容实现的瀑布流效果
2016/01/07 PHP
奇妙的js
2007/09/24 Javascript
JavaScript 设计模式 富有表现力的Javascript(一)
2010/05/26 Javascript
input 输入框获得/失去焦点时隐藏/显示文字(jquery版)
2013/04/02 Javascript
js过滤特殊字符输入适合输入、粘贴、拖拽多种情况
2014/03/22 Javascript
jQuery实现鼠标单击网页文字后在文本框显示的方法
2015/05/06 Javascript
基于BootStarp的Dailog
2016/04/28 Javascript
AngularJS 简单应用实例
2016/07/28 Javascript
javascript实现复选框全选或反选
2017/02/04 Javascript
js常用DOM方法详解
2017/02/04 Javascript
完美实现js选项卡切换效果(二)
2017/03/08 Javascript
详解Vue-cli代理解决跨域问题
2017/09/27 Javascript
Vue路由切换时的左滑和右滑效果示例
2018/05/29 Javascript
vue.js的状态管理vuex中store的使用详解
2019/11/08 Javascript
小程序跳转H5页面的方法步骤
2020/03/06 Javascript
javascript实现点击产生随机图形
2021/01/25 Javascript
python函数形参用法实例分析
2015/08/04 Python
python中正则表达式的使用方法
2018/02/25 Python
Flask Web开发入门之文件上传(八)
2018/08/17 Python
Python 3.8 新功能全解
2019/07/25 Python
python实现简单贪吃蛇游戏
2020/09/29 Python
html5 Canvas画图教程(1)—画图的基本常识
2013/01/09 HTML / CSS
Debenhams百货英国官方网站:Debenhams UK
2016/07/12 全球购物
Reebok官方旗舰店:美国知名健身品牌锐步
2019/01/07 全球购物
澳大利亚领先的时尚内衣零售商:Bras N Things
2020/07/28 全球购物
汽车机修工岗位职责
2014/03/06 职场文书
大学新闻系应届生求职信
2014/06/02 职场文书
乡领导班子四风问题对照检查材料
2014/09/25 职场文书
自荐信怎么写
2015/03/04 职场文书
会计实训总结范文
2015/08/03 职场文书