django学习笔记之登录

来源:互联网 发布:spring 源码书籍 编辑:程序博客网 时间:2024/06/05 06:09

在测试admin成功之后我开始写web的第一个功能,登录。顺序如下:

1.首先在url里面添加登录,我把登录的文件放在account.py下面,所以url写为:url(r'^accounts/login/$', 'sys_pm.account.userlogin',name='userlogin'),这里的name参数为此条url的别名,当你想引用这条url时候,只需要action={% url “userlogin” %}这样写就可以调用到相应的方法。

2.当定义好url之后,我开始实现userlogin的方法,此段代码大意就是当,代码如下:

def userlogin(request):
    if request.method=="POST":
        form =LoginForm(request=request,data=request.POST)
        if form.is_valid():
            return HttpResponseRedirect('/')
        else:
            return render_to_response('accounts/login.html',{
                "form":form},context_instance=RequestContext(request))
    else:
        form =LoginForm()
        if request.user.is_authenticated():
            return HttpResponseRedirect('/')
return render_to_response('accounts/login.html',context_instance=RequestContext(request))

这里注释几点:

1)关于get和post方法简单说一下,get用于获取或查询信息,post一般用于更新资源,所以有动作的使用post,查询等的使用get。

2) LoginForm是django表单类里的一个表单,对于此表单类接下来会有讨论。

3)HttpResponseRedirect重定向到新的url。from django.http import HttpResponseRedirect 。

4)request.user.is_authenticated()这个参数是user类里验证登录的函数

3.下面看一下对应的表单,重写了如下几个函数,关于usernamefield和passwordfield是对现有类型的的一次封装,关于表单,这里说的比较详细http://www.douban.com/note/296298497/?type=like,细致需要看官方文档

class LoginForm(forms.Form):
    username=UsernameField(required=True,max_length=50,min_length=6)
    password=PasswordField(required=True,max_length=50,min_length=6)
    def __init__(self,request=None,*args,**kwargs):
    def clean(self):
    def get_user_id(self):

    def get_user(self):

4.对于现有类型的封装其实很简单,这里只是根据需求去显示一些提示信息和做了一些优化工作。validator是对有效性的控制,对于username的实现一起写在下面。

class UsernameField(CharField):
    default_error_messages = {
        'invalid':u'账号由字母数字下划线组成',
        'required':u'账号由字母数字下划线组成',
    }
    default_validators = [username]
    def clean(self,value):
        value = self.to_python(value).strip()
        return super(UsernameField, self).clean(value)


username_re = re.compile(r'^[\w]+?$')

username = RegexValidator(username_re,u"账号由字母数字下划线组成的字符串最少为6位",'invalid')

0 0