码迷,mamicode.com
首页 > 其他好文 > 详细

django的用户form登录

时间:2017-12-16 17:17:32      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:hdr   hit   self   orm   image   toc   src   rms   cep   

{% if request.user.is_authenticated %}
<div class="top">
<div class="wp">
<div class="fl">
<p>服务电话:<b>33333333</b></p>
</div>
<!--登录后跳转-->

<div class="personal">
<dl class="user fr">
<dd>bobby<img class="down fr" src="../images/top_down.png"/></dd>
<dt><img width="20" height="20" src="../media/image/2016/12/default_big_14.png"/></dt>
</dl>
<div class="userdetail">
<dl>
<dt><img width="80" height="80" src="../media/image/2016/12/default_big_14.png"/></dt>
<dd>
<h2>django</h2>
<p>bobby</p>
</dd>
</dl>
<div class="btn">
<a class="personcenter fl" href="usercenter-info.html">进入个人中心</a>
<a class="fr" href="/logout/">退出</a>
</div>
</div>
</div>
</div>
</div>
{% else %}
<div class="top">
<div class="wp">
<div class="fl"><p>服务电话:<b>33333333</b></p></div>
<!--登录后跳转-->
<a style="color:white" class="fr registerbtn" href="register.html">注册</a>
<a style="color:white" class="fr loginbtn" href="login.html">登录</a>
</div>
</div>
{% endif %}




<div class="fl form-box">
<h2>帐号登录</h2>
<form action="/login/" method="post" autocomplete="off">
<input type=‘hidden‘ name=‘csrfmiddlewaretoken‘ value=‘mymQDzHWl2REXIfPMg2mJaLqDfaS1sD5‘ />
<div class="form-group marb20 }{% if login_form.errors.username %} errorput {% endif %}">
<label>用&nbsp;户&nbsp;名</label>
<input name="username" id="account_l" type="text" placeholder="手机号/邮箱" />
</div>
<div class="form-group marb8 {% if login_form.errors.password %} errorput {% endif %}">
<label>密&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;码</label>
<input name="password" id="password_l" type="password" placeholder="请输入您的密码" />
</div>
<div class="error btns login-form-tips" id="jsLoginTips">{% for key,error in login_form.errors.items %}{{ error }}{% endfor %}{{ msg }}</div>
<div class="auto-box marb38">

<a class="fr" href="forgetpwd.html">忘记密码?</a>
</div>
<input class="btn btn-green" id="jsLoginBtn" type="submit" value="立即登录 > " />
<input type=‘hidden‘ name=‘csrfmiddlewaretoken‘ value=‘5I2SlleZJOMUX9QbwYLUIAOshdrdpRcy‘ />
{% csrf_token %}
</form>
<p class="form-p">没有慕学在线网帐号?<a href="register.html">[立即注册]</a></p>
</div>



from django.contrib.auth import authenticate,login

class LoginView(View):

def get(self,request):
return render(request, "login.html", {})

def post(self,request):
login_form = LoginForm(request.POST)
if login_form.is_valid():
user_name = request.POST.get(‘username‘, ‘‘)
pass_word = request.POST.get(‘password‘, ‘‘)
user = authenticate(username=user_name, password=pass_word) # 验证这两个数据和数据库是否相同
if user is not None:
if user.is_active:
login(request, user) # 调用该方法进行登录
return render(request, ‘index.html‘)
else:
return render(request, ‘login.html‘)
else:
return render(request, "login.html", {‘msg‘: u‘用户名或者密码错误!‘})
else:
return render(request, "login.html", {‘login_form‘: login_form})

前提:登录的时候必须输入username和password来完成,如何通过邮箱以及username都能登录呢,django提供了一种方法,让我们可以自定义authenticate方法来完成登录,只需要在setting.py当中重载一个变量,
# Application definition
AUTHENTICATION_BACKENDS = (
‘users.views.CustomBackends‘,
)
在user的view中定义这个类:
from django.contrib.auth.backends import ModelBackend
from django.db.models import Q
class CustomBackends(ModelBackend):
def authenticate(self, username=None, password=None, **kwargs):
try:
user = UserProfile.objects.get(Q(username=username)| Q(email=username))
if user.check_password(password):
return user
except Exception as e:
return None
form的用处:把用户提交过来的表单进行一部分预处理,只有处理通过才能进行下一步处理。
在userapp下建立一个forms.py文件,
from django import forms
class LoginForm(forms.Form):
username = forms.CharField(required=True)
password = forms.CharField(required=True,min_length=5)
注意:html页面的username和password字段名称必须和form里面的字段名称一样,实例化form的时候就已经对里面的字段都做了验证,只有form验证通过之后,才会到数据中查询是否正确

django的用户form登录

标签:hdr   hit   self   orm   image   toc   src   rms   cep   

原文地址:http://www.cnblogs.com/onlyhold/p/8046635.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!