1. index页面
在url.py文件下写入以下代码设置index
代码中的'hello.html'为你的index页面
from django.views.generic import TemplateView
urlpatterns = [
url('^$', TemplateView.as_view(template_name='hello.html'), name="index"),
]
静态问件配置
在settings.py文件中最后一行修改成以下代码
STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]
2.登陆
基于类的书写
# _*_ coding: utf-8 _*_
from django.shortcuts import render
from django.contrib.auth import authenticate, login
from django.contrib.auth.backends import ModelBackend
from django.db.models import Q
from django.views.generic.base import View
from users.models import UserProfile
from .forms import LoginForm
# 登录
class LoginView(View):
# 禁止get方法登录
def get(self, request):
return render(request, "login.html", {})
# post方法登录
def post(self, request):
login_form = LoginForm(request.POST) # from表单 需要创建forms.py文件
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", {"msg":"用户未激活!"})
else:
return render(request, "login.html", {"msg": "用户名或密码错误"})
else:
return render(request, "login.html", {"login_form": login_form})
在url.py中配置url
from users.views import LoginView
urlpatterns = [
# 登陆
url('^login/$', LoginView.as_view(), name="login"),
# 注册
url('^register/$', TemplateView.as_view(template_name='register.html'), name="register"),
]
==ps==:在写前端登陆注册页面时,form表单中需要加{% csrf_token %} 不然会报403错误
3. 重载auth方法
1.在settings.py中加入以下内容
AUTH_USER_MODEL = "users.UserProfile"
在views中加入以下代码
# _*_ coding: utf-8 _*_
from django.shortcuts import render
from django.contrib.auth import authenticate, login
from django.contrib.auth.backends import ModelBackend
from django.db.models import Q
from users.models import UserProfile
# 重载auth方法,用户名邮箱手机号都可以登录
class CustomBakend(ModelBackend):
def authenticate(self, username=None, password=None, **kwargs):
try:
user = UserProfile.objects.get(Q(username=username) | Q(email=username) | Q(moblie=username))
if user.check_password(password):
return user
except Exception as e:
return None
4.登陆状态与未登录状态前端页面
{% 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>{{request.user}}<img class="down fr" src="/static/images/top_down.png"/></dd>
<dt><img width="20" height="20" src="/static/media/image/2016/12/default_big_14.png"/></dt>
</dl>
<div class="userdetail">
<dl>
<dt><img width="80" height="80" src="/static/media/image/2016/12/default_big_14.png"/></dt>
<dd>
<h2>django</h2>
<p>{{request.user}}</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="{% url 'register' %}">注册</a>
<a style="color:white" class="fr loginbtn" href="{% url 'login' %}">登录</a>
</div>
</div>
{% endif %}
5.重载auth方法使邮箱也能登陆
- 在setting中加入
# Application definition
AUTHENTICATION_BACKENDS = (
'users.views.CustomBackend',
)
- 在view.py中写
from django.contrib.auth.backends import ModelBackend
from .models import UserProfile
from django.db.models import Q
# 重载auth方法使邮箱可以作为用户名登陆
class CustomBackend(ModelBackend):
def authenticate(self, request, username=None, password=None, **kwargs):
try:
# Q语法中 |代表或 ,代表且
user = UserProfile.objects.get(Q(username=username) | Q(email=username))
if user.check_password(password):
return user
except Exception as e:
return None
6.用户登出
- view.py中写
from django.contrib.auth import authenticate, login, logout
from django.http import HttpResponse, HttpResponseRedirect
#from django.urls import reverse
from django.core.urlresolvers import reverse
# 登出
class LogoutView(View):
def get(self, request):
logout(request)
return HttpResponseRedirect(reverse("index"))
- 在urls.py中写
url('^logout/$', Views.LogoutView.as_view(), name="logout"),
- 页面中使用
<a href="/logout/">退出</a>