django视图函数中 应用装饰器
- from django.shortcuts import render, redirect, HttpResponse
- from .forms import LoginForm, RegistrationForm
- from django.contrib.auth import authenticate, login, logout
- from django.contrib.auth.models import User
- from django import forms
- from .models import UserInfo
- # 不带参数的装饰器
- def outer(func):
- def inner(request, *args, **kwargs):
- if request.user.is_authenticated:
- return func(request, *args, **kwargs)
- else:
- return redirect('/account/login/')
- return inner
- # 单参数的装饰器
- def outer_args(arg):
- def outers(func):
- def inner(request, *args, **kwargs):
- if request.user.is_authenticated:
- return func(request, *args, **kwargs)
- else:
- print(arg)
- return redirect(arg)
- return inner
- return outers
- def user_login(request):
- if request.method == 'GET':
- form_obj = LoginForm()
- return render(request, 'account/login.html', {'form': form_obj})
- if request.method == 'POST':
- form_obj = LoginForm(request.POST)
- if form_obj.is_valid():
- user = authenticate(username=form_obj.cleaned_data['username'], password=form_obj.cleaned_data['password'])
- if user:
- login(request, user)
- return redirect('/')
- else:
- return HttpResponse('username or password is not right !')
- else:
- return render(request, 'account/login.html', {'form': form_obj})
- def user_logout(request):
- logout(request)
- return redirect('/')
- def register(request):
- if request.method == 'GET':
- register_form = RegistrationForm()
- return render(request, 'account/register.html', {'form':register_form, 'user': None})
- if request.method == 'POST':
- register_form = RegistrationForm(request.POST)
- if register_form.is_valid():
- new_user = register_form.save(commit=False)
- new_user.set_password(register_form.cleaned_data['password'])
- new_user.save()
- return redirect('/')
- else:
- return render(request, 'account/register.html', {'form': register_form, 'user': None})
- @outer_args('/account/login/')
- def personal_data(request):
- return HttpResponse('OK')
django视图函数中 应用装饰器的更多相关文章
- python框架之Django(8)-CBV中添加装饰器
现有如下检查登录装饰器: from functools import wraps def check_login(func): @wraps(func) def inner(request, *arg ...
- Python - Django - 在 CBV 中使用装饰器
urls.py: from django.conf.urls import url from app02 import views urlpatterns = [ # app02 url(r'^app ...
- Django视图函数函数之视图装饰器
FBV模式装饰器: 普通函数的装饰器(语法糖@) views.py from django.shortcuts import render def wrapper(f): def inner(*arg ...
- django变量使用-在模板中使用视图函数中的变量
DTL语言,即django template language 第一次使用时,需要修改项目的setting.py文件,将其中TEMPLATES中的DIRS修改为os.path.join(BASE_DI ...
- django ----CBV中加装饰器
CBV中加装饰器 from django import views from django.utils.decorators import method_decorator def login_aut ...
- Django基础七之CBV装饰器和中间件
Django基础七之CBV装饰器和中间件 目录 Django基础七之CBV装饰器和中间件 1. CBV加装饰器 2. Django中间件 2.1 Django中间件介绍 2.2 自定义中间件 2.2. ...
- Django视图函数
一.视图函数 1. 视图函数的第一个参数一定是一个HTTPRequest类型的对象,这个对象是Django自动创建的,具体形参名通常用request.通过这个对象,可以调用请求的一些参数,比如requ ...
- 简单说明Python中的装饰器的用法
简单说明Python中的装饰器的用法 这篇文章主要简单说明了Python中的装饰器的用法,装饰器在Python的进阶学习中非常重要,示例代码基于Python2.x,需要的朋友可以参考下 装饰器对与 ...
- 第四天 内置函数2 随机码 装饰器 迭代器、生成器 递归 冒泡算法 JSON
关于函数的return li = [11,22,33,44] def f1(arg): arg.append(55) li = f1(li) print(li) 因为li = f1(li) 实际赋值的 ...
随机推荐
- POJ 1741 Tree 求树上路径小于k的点对个数)
POJ 174 ...
- Nginx错误日志与优化专题
一.Nginx配置和内核优化 实现突破十万并发 二.一次Nignx的502页面的错误记录 (1)错误页面显示 错误日志: // :: [error] #: * recv() failed (: Con ...
- c# dev GridControl多选当前行显示样式问题
由于Dev GridControl在支持多选的时候,如果如果焦点行单独加了样式,Appearance-->FocusedRow & HideSelectionRow 这个时候,鼠标焦 ...
- Java并发编程原理与实战三十一:Future&FutureTask 浅析
一.Futrue模式有什么用?------>正所谓技术来源与生活,这里举个栗子.在家里,我们都有煮菜的经验.(如果没有的话,你们还怎样来泡女朋友呢?你懂得).现在女票要你煮四菜一汤,这汤是鸡汤, ...
- bzoj1485 有趣的数列
传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=1485 [题解] Catalan数,注意不能直接用逆元,需要分解质因数. # include ...
- 20155307 2016-2017-2 《Java程序设计》第6周学习总结
20155307 2016-2017-2 <Java程序设计>第6周学习总结 教材学习内容总结 串流数据有来源及目的地,衔接两者的是串流对象.如果要将数据从来源取出,可以使用输入串流:如果 ...
- js之事件冒泡和事件捕获及其阻止详细介绍
虽然精通jquery,但对它的原型javascript却不是很了解,最近在学习javascript中遇到了一些困难,比如冒泡和捕获,很多次被提到,但又不知究竟应用在何处.找到了一些好文章解惑,在这里分 ...
- python 面试题4
Python面试题 基础篇 分类: Python2014-08-08 13:15 2071人阅读 评论(0) 收藏 举报 最近,整理了一些python常见的面试题目,语言是一种工具,但是多角度的了解工 ...
- raw数据类型
Oracle中用于保存位串的数据类型是RAW,LONG RAW(推荐使用BLOB). RAW,类似于CHAR,声明方式RAW(L),L为长度,以字节为单位,作为数据库列最大2000,作为变量最大327 ...
- C#基础学习之FileStream
FileStream和File的区别 后者比前者给内存带来压力大. FileStream可以操作字节也就是可以保存任何类型的文件. 1.FileStream读文件操作 //OpenOrCreate: ...