####前端
```html
{% extends 'layout/basic.html' %}
{% load static %}
```html
{% extends 'layout/basic.html' %}
{% load static %}
{% block title %} 用户登录 {% endblock %}
{% block css %}
<link rel="stylesheet" href="{% static 'css/account.css' %}">
{% endblock %}
{% block content %}
<div class="account">
<div class="title">用户登录</div>
<form method="POST" novalidate>
{% csrf_token %}
{% for field in form %}
{% if field.name == 'code' %}
<div class="form-group">
<label for="{{ field.id_for_label }}">{{ field.label }}</label>
<div class="row">
<div class="col-xs-7">
{{ field }}
<span class="error-msg">{{ field.errors.0 }}</span>
</div>
<div class="col-xs-5">
<img src="{% url 'image_code' %}" id="imageCode" title="点击更换图片">
</div>
</div>
</div>
{% else %}
<div class="form-group">
<label for="{{ field.id_for_label }}">{{ field.label }}</label>
{{ field }}
<span class="error-msg">{{ field.errors.0 }}</span>
</div>
{% endif %}
{% endfor %}
<div>
<div style="float: right;">
<a href="{% url 'login_sms' %}">短信验证码登录?</a>
</div>
</div>
<div style="float: right;">
<a href="{% url 'login_sms' %}">短信验证码登录?</a>
</div>
</div>
<div class="row">
<div class="col-xs-3">
<input type="submit" class="btn btn-primary" value="登 录"/>
</div>
</div>
</form>
</div>
{% endblock %}
<div class="col-xs-3">
<input type="submit" class="btn btn-primary" value="登 录"/>
</div>
</div>
</form>
</div>
{% endblock %}
{% block js %}
<script>
$(function () {
$('#imageCode').click(function () {
var oldSrc = $(this).attr('src');
$(this).attr('src', oldSrc + "?");
})
})
</script>
{% endblock %}
```
####在view中处理登入函数
```python
def login(request):
"""用户账号登入"""
if request.method == 'GET':
form = LoginForm(request)
return render(request, 'login.html', {'form': form})
form = LoginForm(request,data = request.POST)
if form.is_valid():
username = form.cleaned_data['username']
password = form.cleaned_data['password']
user_object = models.UserInfo.objects.filter(Q(mobile_phone=username)|Q(email=username)).
filter(password=password).first()
if user_object:
request.session['user_id'] = user_object.id
request.session.set_expiry(60*60*24*12)
return redirect('index')
form.add_error('username','用户名或者密码错误')
return render(request, 'login.html', {'form': form})
```
```python
def login(request):
"""用户账号登入"""
if request.method == 'GET':
form = LoginForm(request)
return render(request, 'login.html', {'form': form})
form = LoginForm(request,data = request.POST)
if form.is_valid():
username = form.cleaned_data['username']
password = form.cleaned_data['password']
user_object = models.UserInfo.objects.filter(Q(mobile_phone=username)|Q(email=username)).
filter(password=password).first()
if user_object:
request.session['user_id'] = user_object.id
request.session.set_expiry(60*60*24*12)
return redirect('index')
form.add_error('username','用户名或者密码错误')
return render(request, 'login.html', {'form': form})
```
####在Form中进行的处理
先创建一个类,把一些from类的公共要创建的东西写入进去,然后让其他的类继承它就可以节约很多代码了
```python
class bootstrap(object):
bootstrap_class_exclude = []
先创建一个类,把一些from类的公共要创建的东西写入进去,然后让其他的类继承它就可以节约很多代码了
```python
class bootstrap(object):
bootstrap_class_exclude = []
def __init__(self,*args,**kwargs):
super().__init__(*args,**kwargs)
for name,filed in self.fields.items():
if name in self.bootstrap_class_exclude:
continue
filed.widget.attrs['class'] = 'form-control' # 添加属性
filed.widget.attrs['placeholder'] = '请输入%s'%(filed.label,)
```
####创建对form进行用户账户登入操作
```python
class LoginForm(bootstrap,forms.Form):
username = forms.CharField(label='邮箱或手机号')
password = forms.CharField(label='密码',widget=forms.PasswordInput())
code = forms.CharField(label='图片'
'验证码')
super().__init__(*args,**kwargs)
for name,filed in self.fields.items():
if name in self.bootstrap_class_exclude:
continue
filed.widget.attrs['class'] = 'form-control' # 添加属性
filed.widget.attrs['placeholder'] = '请输入%s'%(filed.label,)
```
####创建对form进行用户账户登入操作
```python
class LoginForm(bootstrap,forms.Form):
username = forms.CharField(label='邮箱或手机号')
password = forms.CharField(label='密码',widget=forms.PasswordInput())
code = forms.CharField(label='图片'
'验证码')
def __init__(self, request, *args, **kwargs):
super().__init__(*args, **kwargs)
self.request = request
super().__init__(*args, **kwargs)
self.request = request
def clean_password(self):
pwd = self.cleaned_data['password']
return encrypt.md5(pwd) # 密码加密并且返回
pwd = self.cleaned_data['password']
return encrypt.md5(pwd) # 密码加密并且返回
def clean_code(self):
"""判断验证码是否输入正确"""
code = self.cleaned_data['code']
"""判断验证码是否输入正确"""
code = self.cleaned_data['code']
# 去session中去获取验证码
session_code = self.request.session.get('image_code')
if not session_code:
raise ValidationError('验证码已经过去')
if code.strip().upper() != session_code.strip().upper():
raise ValidationError('验证码输入错误')
session_code = self.request.session.get('image_code')
if not session_code:
raise ValidationError('验证码已经过去')
if code.strip().upper() != session_code.strip().upper():
raise ValidationError('验证码输入错误')
return code
```
```