使用自定义的前端登陆界面 ,
<form class="form-signin" role="form" method="POST" action="{% url 'logincontrol' %}" >
{% csrf_token %}
<h2 class="form-signin-heading ">请登陆</h2>
<input type="text" class="form-control" placeholder="用户名" name="username"
required autofocus>
<input type="password" class="form-control" name="password"
placeholder="密码" required>
<div class="text-danger">{{ error }}</div>
<div class="checkbox">
<label>
<input type="checkbox" value="remember-me"> Remember me
</label>
</div>
<button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>
<p>没有账户?<a href="">[立即注册]</a> <a href="" style="text-align: right">忘记密码</a></p>
</form>
前端显示
后台view.py
需要首先导入
from django.contrib.auth import authenticate, login, logout
# 登陆验证
def logincontrol(request):
if request.method == 'GET':
print "get请求!"
return render(request, 'rc_test/rc_login.html')
else:
forms = loginForm(request.POST)
if forms.is_valid(): # 如果格式正确 ,那就开始获取数据 username and password
username = forms.cleaned_data.get('username', None)
password = forms.cleaned_data.get('password', None)
user = authenticate(username=username, password=password)
if user:
login(request, user) # 登陆验证,成功进入到index页面
return HttpResponseRedirect(reverse("home"))
else:
return render(request, 'rc_test/rc_login.html', context={'error': '用户名和密码错误'})
else:
return render(request, 'rc_test/rc_login.html',
context={'error': '用户名和密码不符合规则', "login_form": forms})
引用forms的类
from django import forms
#登陆验证
class loginForm(forms.Form):
username = forms.CharField(max_length=20,min_length=3)
password =forms.CharField(max_length=20,min_length=3)
登陆成功后 ,在主页验证是否登陆了
{% if request.user.is_authenticated %} #如果登陆了 ,就把登陆名称显示出来,配置一个logout
<div class="top-menu visible-desktop"> <ul class="pull-right"> <li class="icon-user"></li> <li>{{ loginname }}</li> <li><a href="{% url 'userlogout' %}" style="color: red">退出</a></li> </ul> </div>
{% else %} #如果没有登陆 ,就显示一个登陆
<div class="top-menu visible-desktop"> <ul class="pull-right"> <li class="icon-user"></li> <a href="{% url 'logincontrol' %}">登陆</a> </ul> </div> <a class="btn btn-navbar slide_menu_left visible-tablet"> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </a>
logout view.py
# 退出登陆
def userlogout(request):
logout(request)
return HttpResponseRedirect(reverse('home'))
urls.py
url(r'^logincontrol/',logincontrol,name='logincontrol'),
前端还有一种显示方式 :
几种写法
<form id="your-profile" action="{% url 'logincontrol' %}" method="post">
{% csrf_token %}
{# <table class="form-table">#}
{# {{ form.as_ul }} # 这是第一种写法,在#}
{# <ul> 显示表单#}
{{ form.as_p }} # 这是第二种写法,在<p> 显示表单
{# <!--{{ form.as_table }}--> # 这是第三种写法,在#}
{# <table>显示表单#}
{# {% for field in form %} # 这是第四种写法,以循环形式显示表单#}
{# {{ field.label_tag }}:{{ field }}#}
{# {{ field.errors }}#}
{# {% endfor %}#}
{# </table>#}
{# </ul>#}
<p class="submit"><input type="submit" name="submit" id="submit" class="button-primary"
value="注册信息"/></p>
</table>
</form>
如果使用上面的形式 ,需要修改下views.py
if request.method == 'GET':
form = loginForm1() #这里实例化forms 就可以了 ,返回给前端
print "get请求!"
return render(request, 'rc_test/rc_login.html',context={'form':form })