1. from django.shortcuts import render, redirect, HttpResponse
  2. from .forms import LoginForm, RegistrationForm
  3. from django.contrib.auth import authenticate, login, logout
  4. from django.contrib.auth.models import User
  5. from django import forms
  6. from .models import UserInfo
  7.  
  8. # 不带参数的装饰器
  9. def outer(func):
  10. def inner(request, *args, **kwargs):
  11. if request.user.is_authenticated:
  12. return func(request, *args, **kwargs)
  13. else:
  14. return redirect('/account/login/')
  15. return inner
  16.  
  17. # 单参数的装饰器
  18. def outer_args(arg):
  19. def outers(func):
  20. def inner(request, *args, **kwargs):
  21. if request.user.is_authenticated:
  22. return func(request, *args, **kwargs)
  23. else:
  24. print(arg)
  25. return redirect(arg)
  26. return inner
  27. return outers
  28.  
  29. def user_login(request):
  30. if request.method == 'GET':
  31. form_obj = LoginForm()
  32. return render(request, 'account/login.html', {'form': form_obj})
  33.  
  34. if request.method == 'POST':
  35. form_obj = LoginForm(request.POST)
  36. if form_obj.is_valid():
  37. user = authenticate(username=form_obj.cleaned_data['username'], password=form_obj.cleaned_data['password'])
  38. if user:
  39. login(request, user)
  40. return redirect('/')
  41. else:
  42. return HttpResponse('username or password is not right !')
  43. else:
  44.  
  45. return render(request, 'account/login.html', {'form': form_obj})
  46.  
  47. def user_logout(request):
  48. logout(request)
  49. return redirect('/')
  50.  
  51. def register(request):
  52. if request.method == 'GET':
  53. register_form = RegistrationForm()
  54. return render(request, 'account/register.html', {'form':register_form, 'user': None})
  55.  
  56. if request.method == 'POST':
  57. register_form = RegistrationForm(request.POST)
  58. if register_form.is_valid():
  59. new_user = register_form.save(commit=False)
  60. new_user.set_password(register_form.cleaned_data['password'])
  61. new_user.save()
  62. return redirect('/')
  63. else:
  64. return render(request, 'account/register.html', {'form': register_form, 'user': None})
  65.  
  66. @outer_args('/account/login/')
  67. def personal_data(request):
  68. return HttpResponse('OK')

  

django视图函数中 应用装饰器的更多相关文章

  1. python框架之Django(8)-CBV中添加装饰器

    现有如下检查登录装饰器: from functools import wraps def check_login(func): @wraps(func) def inner(request, *arg ...

  2. Python - Django - 在 CBV 中使用装饰器

    urls.py: from django.conf.urls import url from app02 import views urlpatterns = [ # app02 url(r'^app ...

  3. Django视图函数函数之视图装饰器

    FBV模式装饰器: 普通函数的装饰器(语法糖@) views.py from django.shortcuts import render def wrapper(f): def inner(*arg ...

  4. django变量使用-在模板中使用视图函数中的变量

    DTL语言,即django template language 第一次使用时,需要修改项目的setting.py文件,将其中TEMPLATES中的DIRS修改为os.path.join(BASE_DI ...

  5. django ----CBV中加装饰器

    CBV中加装饰器 from django import views from django.utils.decorators import method_decorator def login_aut ...

  6. Django基础七之CBV装饰器和中间件

    Django基础七之CBV装饰器和中间件 目录 Django基础七之CBV装饰器和中间件 1. CBV加装饰器 2. Django中间件 2.1 Django中间件介绍 2.2 自定义中间件 2.2. ...

  7. Django视图函数

    一.视图函数 1. 视图函数的第一个参数一定是一个HTTPRequest类型的对象,这个对象是Django自动创建的,具体形参名通常用request.通过这个对象,可以调用请求的一些参数,比如requ ...

  8. 简单说明Python中的装饰器的用法

    简单说明Python中的装饰器的用法 这篇文章主要简单说明了Python中的装饰器的用法,装饰器在Python的进阶学习中非常重要,示例代码基于Python2.x,需要的朋友可以参考下   装饰器对与 ...

  9. 第四天 内置函数2 随机码 装饰器 迭代器、生成器 递归 冒泡算法 JSON

    关于函数的return li = [11,22,33,44] def f1(arg): arg.append(55) li = f1(li) print(li) 因为li = f1(li) 实际赋值的 ...

随机推荐

  1. POJ 1741 Tree 求树上路径小于k的点对个数)

                                                                                                 POJ 174 ...

  2. Nginx错误日志与优化专题

    一.Nginx配置和内核优化 实现突破十万并发 二.一次Nignx的502页面的错误记录 (1)错误页面显示 错误日志: // :: [error] #: * recv() failed (: Con ...

  3. c# dev GridControl多选当前行显示样式问题

    由于Dev GridControl在支持多选的时候,如果如果焦点行单独加了样式,Appearance-->FocusedRow  &  HideSelectionRow 这个时候,鼠标焦 ...

  4. Java并发编程原理与实战三十一:Future&FutureTask 浅析

    一.Futrue模式有什么用?------>正所谓技术来源与生活,这里举个栗子.在家里,我们都有煮菜的经验.(如果没有的话,你们还怎样来泡女朋友呢?你懂得).现在女票要你煮四菜一汤,这汤是鸡汤, ...

  5. bzoj1485 有趣的数列

    传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=1485 [题解] Catalan数,注意不能直接用逆元,需要分解质因数. # include ...

  6. 20155307 2016-2017-2 《Java程序设计》第6周学习总结

    20155307 2016-2017-2 <Java程序设计>第6周学习总结 教材学习内容总结 串流数据有来源及目的地,衔接两者的是串流对象.如果要将数据从来源取出,可以使用输入串流:如果 ...

  7. js之事件冒泡和事件捕获及其阻止详细介绍

    虽然精通jquery,但对它的原型javascript却不是很了解,最近在学习javascript中遇到了一些困难,比如冒泡和捕获,很多次被提到,但又不知究竟应用在何处.找到了一些好文章解惑,在这里分 ...

  8. python 面试题4

    Python面试题 基础篇 分类: Python2014-08-08 13:15 2071人阅读 评论(0) 收藏 举报 最近,整理了一些python常见的面试题目,语言是一种工具,但是多角度的了解工 ...

  9. raw数据类型

    Oracle中用于保存位串的数据类型是RAW,LONG RAW(推荐使用BLOB). RAW,类似于CHAR,声明方式RAW(L),L为长度,以字节为单位,作为数据库列最大2000,作为变量最大327 ...

  10. C#基础学习之FileStream

    FileStream和File的区别  后者比前者给内存带来压力大. FileStream可以操作字节也就是可以保存任何类型的文件. 1.FileStream读文件操作 //OpenOrCreate: ...