import os
from django.shortcuts import render
from django.contrib.admin.views.decorators import staff_member_required
from django.views.generic import View
from django.views.decorators.http import require_POST, require_GET
from django.contrib.auth.decorators import login_required # 登录装饰器
from django.utils.decorators import method_decorator from ..news.models import NewsCategory, News
from ..news.forms import NewsForm from utils import restful # Create your views here.
# staff_member_required(login_url) 用来验证is_staff(User表中的字段)是否为真,判断用户能否登入cms页面,
# login_url是不通过验证跳转, 前端通过login函数登录后的user.is_staff判断是否显示
@staff_member_required(login_url='/')
def index(request):
return render(request, 'cms/index.html') # method_decorator 使装饰器装饰在类上面(装饰器的类装饰器?) login_required 登陆验证,失败跳转
# despatch 类里面有多个方法(get,post).将这些方法都装饰在despatch中,(通过despatch方法确定出get or post 再由login_required装饰)。
@method_decorator(login_required(login_url='/account/login/'), name='dispatch')
class WriteNewsView(View):
def get(self, request):
categories = NewsCategory.objects.all()
return render(request, 'cms/write_news1.html', locals()) def post(self, request):
forms = NewsForm(request.POST)
if forms.is_valid():
cleaned_data = forms.cleaned_data
title = cleaned_data.get('title')
desc = cleaned_data.get('desc')
thumbnail = cleaned_data.get('thumbnail')
content = cleaned_data.get('content')
author = request.user category_id = cleaned_data.get('category')
category = NewsCategory.objects.get(id=category_id)
try:
News.objects.create(
title=title, desc=desc, thumbnail=thumbnail, content=content, category=category, author=author
)
return restful.ok()
except:
return restful.params_error("服务器gg")
error = forms.get_first_message()
return restful.params_error(error)

   # 简化版dispatch. 是View中的方法
def dispatch(self, request, *args, **kwargs):
if request.method == "GET":
return self.get(request)
elif request.method == "POST":
return self.post(request)

自定义django登录装饰器

def xfz_auth_required(func):
def wrapper(request, *args, **kwargs):
if request.user.is_authenticated:
return func(request, *args, **kwargs)
else:
if request.is_ajax():
return restful.params_error(message="请登陆")
return redirect('/account/login')
return wrapper

最新文章

  1. IntelliJ IDEA 13 Keygen
  2. guice框架的入门使用
  3. JSP HTML区别
  4. PO VO DAO DTO BO TO概念与区别
  5. AVFoundation--AVPlayer
  6. 预编译语句(Prepared Statements)介绍,以MySQL为例
  7. easyui combobox 不能选中值的问题
  8. 第48节:Java当中的集合框架
  9. 生活实遇记-Kindle好久没用,屏幕一直处于电池状态,怎么解决?
  10. .Net Core 简单定时任务框架封装
  11. early_suspend【转】
  12. maven . mac
  13. DEP
  14. UITableView 让 cell 被选中的颜色底色快速消失,而不是一直停留在cell上
  15. MD5签名
  16. [svc][db]centos7 Mariadb安装
  17. Linux安装tomcat服务器
  18. VC调试篇:ASSERT(FALSE)时怎么办?查看调用堆栈
  19. [Contest20180418]数学竞赛
  20. Java & 混型

热门文章

  1. BZOJ3052: [wc2013]糖果公园【树上带修莫队】
  2. Windows7系统中nginx与IIS服务器搭建集群实现负载均衡
  3. LM算法的推导过程
  4. Selenium(ThoughtWorks公司开发的web自动化测试工具)
  5. 转 update关联更新在sqlserver和oracle中的实现
  6. Unity3D 4.x怎样实现动画的Ping Pong效果
  7. button使用注意
  8. jquery实现select二级联动
  9. Selenium2+python自动化40-cookie相关操作
  10. AppBox Mvc数据库初始化