Django中一个登录视图实现两个不同的登录模版
时间: 2023-06-11 18:06:17 浏览: 60
可以通过在登录视图中判断用户的登录方式(例如是普通登录还是第三方登录),然后动态地渲染对应的登录模版。
例如:
```python
from django.shortcuts import render
from django.contrib.auth.decorators import login_required
@login_required
def login(request):
if request.method == 'POST':
# 判断用户的登录方式
if request.POST.get('login_type') == 'normal':
# 普通登录
# 处理登录逻辑
return render(request, 'normal_login_success.html')
elif request.POST.get('login_type') == 'third_party':
# 第三方登录
# 处理登录逻辑
return render(request, 'third_party_login_success.html')
else:
return render(request, 'login.html')
```
在模版中,需要加入一个隐藏的表单字段,用于标识用户的登录方式:
```html
<form method="post">
{% csrf_token %}
<input type="hidden" name="login_type" value="{{ login_type }}">
<!-- 其他表单字段 -->
<button type="submit">登录</button>
</form>
```
然后在不同的登录模版中,需要设置对应的 `login_type` 值:
普通登录模版 `normal_login.html`:
```html
{% extends 'base.html' %}
{% block content %}
<h2>普通登录</h2>
{% include 'login_form.html' %}
{% endblock %}
{% block script %}
<script>
document.querySelector('input[name="login_type"]').value = 'normal';
</script>
{% endblock %}
```
第三方登录模版 `third_party_login.html`:
```html
{% extends 'base.html' %}
{% block content %}
<h2>第三方登录</h2>
{% include 'login_form.html' %}
{% endblock %}
{% block script %}
<script>
document.querySelector('input[name="login_type"]').value = 'third_party';
</script>
{% endblock %}
```