一、urls.py
urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^$', views.home, name='home'), url('^login/', views.login), url('^page_1/', views.Page_1.as_view()), url('^page_2/', views.page_2), url('^logoff/', views.logoff) ]
二、views.py
from django.shortcuts import render, HttpResponse, redirect from django import views from django.utils.decorators import method_decorator # Create your views here. def login(request): if request.method == 'POST': post_username = request.POST.get('post_username').strip() post_password = request.POST.get('post_password').strip() if post_username == 'tom' and post_password == '111': request.session['login_tag'] = post_username # request.session.set_expiry() tar_url = request.GET.get('tar_url') if tar_url: return redirect(tar_url) return redirect('home') return HttpResponse('账号或密码错误') return render(request, 'login_page.html') def add_login(func): def passer(request, *args, **kwargs): if request.session.get('login_tag'): res = func(request, *args, **kwargs) return res else: tar_url = request.get_full_path() return redirect('/login/?tar_url={}'.format(tar_url)) return passer def home(request): return render(request, 'home_page.html') # 方式二,指定给某个方法添加指定的装饰器 # @method_decorator(add_login, name='post') # @method_decorator(add_login, name='get') class Page_1(views.View): @method_decorator(add_login) # 方式三,给类下面所有方法统一添加指定的装饰器 def dispatch(self, request, *args, **kwargs): return super().dispatch(request, *args, **kwargs) # @method_decorator(add_login) # 方式一,单给下面这个方法添加指定的装饰器 def get(self, request): return HttpResponse('page_1的get') def post(self, request): return HttpResponse('page_1的post') @add_login def page_2(request): return HttpResponse('page_2') @add_login def logoff(request): old_username = request.session.get('login_tag') request.session.flush() return HttpResponse('成功注销[{}]'.format(old_username))
三、templates
1、home_page.html:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> {% load static %} <script src="{% static 'jQuery351.js' %}"></script> <link rel="stylesheet" href="{% static 'Bootstrap337/css/bootstrap.min.css' %}"> <script src="{% static 'Bootstrap337/js/bootstrap.min.js' %}"></script> </head> <body> <h1>主页</h1> <p><a href="login">点击跳转登录</a></p> <p><a href="page_1">去1号页面的get</a></p> <form action="/page_1/" method="post"> <p><input type="submit" value="去1号页面post"></p> </form> <p><a href="page_2">去2号页面</a></p> <p><a href="logoff">注销登录</a></p> </body> </html>
2、login_page.html:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> {% load static %} <script src="{% static 'jQuery351.js' %}"></script> <link rel="stylesheet" href="{% static 'Bootstrap337/css/bootstrap.min.css' %}"> <script src="{% static 'Bootstrap337/js/bootstrap.min.js' %}"></script> </head> <body> <form action="" method="post" novalidate> <p><label for="">username:<input type="text" name="post_username"></label></p> <p><label for="">password:<input type="password" name="post_password"></label></p> <p><input type="submit" value="登录"></p> </form> </body> </html>