一、测试:实现主页面,并跳转到登录页面
url.py
from django.views.generic import TemplateView
urlpatterns = [
url('^$',TemplateView.as_view(template_name="index.html"), name="index"),
url('^login/$',TemplateView.as_view(template_name="login.html"), name="login"),
]
index.py 搜索登录,将将href改为href=”/login/”
<a style="color:white" class="fr loginbtn" href="/login/">登录</a>
二、登录后台逻辑
urls.py添加:
from users.views import user_login
urlpatterns = [url('^$',TemplateView.as_view(template_name="index.html"), name="index"),
url(‘^login/$’, user_login, name=”login”)
]
在users 中views.py:
from django.contrib.auth import authenticate, login
def user_login(request):
if request.method == "POST":
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:
login(request, user)
return render(request, "index.html")
else:
return render(request, "login.html", {"msg":"用户名或密码错误!"})
elif request.method == "GET":
return render(request, "login.html", { })
index.html中添加:
1.
{% if request.user.is_authenticated %}
此处添加登录后的代码
{% else %}
未登录代码
{% endif %}
2.加{{ msg }}
class=”error btns login-form-tips” id=”jsLoginTips”>{{ msg }}
三、添加使用邮箱登录:
views.py中添加:
from django.contrib.auth.backends import ModelBackend
from django.db.models import Q
from .models import UserProfile
class CustomBackend(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
setting.py中添加:
AUTHENTICATION_BACKENDS = (
'users.views.CustomBackend',
)