十八 Django 1.5.4 login_required
来源:互联网 发布:哪个药店软件正品 编辑:程序博客网 时间:2024/05/22 00:18
login_required() 完成以下工作:
- 如果用户未登录,则重定向到settings.LOGIN_URL,在Query String中传递当前绝对路径。例如: /accounts/login/?next=/polls/3/.
- 如果用户已登录,则正常执行view。在View的代码可假定用户已经登录。
一般,用户在成功认证后重定向的链接保存在query string的next参数。如果你想用其他参数名。login_required()中有可选的redirect_field_name参数。
注意:如果你设置了redirect_field_name,你可能还需要在你的login模板中做相应修改。因为保存重定向路径的模板上下文变量(template context variable)将使用参数 redirect_field_name的值作为key。
login_required() 还提供一个可选的 login_url 参数
注意:login_required修饰符不会检查user的is_active标志位。
访问限制 Limiting access to logged-in users that pass a test
Django提供一种简单的方式来判断用户是否具备某种权限: permission_required() 修饰符
一.login.html
{% extends "base.html" %}{% block title %} Login {% endblock %}{% block content %}<form action="." method="POST"> {% csrf_token %} {{ mensaje }} {{ form.as_p }} {% if next %} <input type="hidden" value="{{next}}" name="next"> {% else %} <input type="hidden" value="/" name="next"> {% endif %} <button class="btn btn-primary" type="submit"> Login </button> <h5>Registrarte <a href="/registro/">aquí</a></h5></form>{% endblock %}
二.views.py
from django.shortcuts import render_to_responsefrom django.template import RequestContextfrom demo.apps.ventas.models import productofrom demo.apps.home.forms import ContactForm, LoginForm,RegisterFormfrom django.core.mail import EmailMultiAlternatives # Enviamos HTMLfrom django.contrib.auth.models import Userimport djangofrom demo.settings import URL_LOGINfrom django.contrib.auth import login,logout,authenticatefrom django.http import HttpResponseRedirect# Paginacion en Djangofrom django.core.paginator import Paginator,EmptyPage,InvalidPagefrom django.contrib.auth.decorators import login_requireddef index_view(request): return render_to_response('home/index.html',context_instance=RequestContext(request))@login_required(login_url=URL_LOGIN)def about_view(request): version = django.get_version() mensaje = "Esto es un mensaje desde mi vista" ctx = {'msg':mensaje,'version':version} return render_to_response('home/about.html',ctx,context_instance=RequestContext(request))def productos_view(request,pagina): lista_prod = producto.objects.filter(status=True) # Select * from ventas_productos where status = True paginator = Paginator(lista_prod,5) # Cuantos productos quieres por pagina? = 3 try: page = int(pagina) except: page = 1 try: productos = paginator.page(page) except (EmptyPage,InvalidPage): productos = paginator.page(paginator.num_pages) ctx = {'productos':productos} return render_to_response('home/productos.html',ctx,context_instance=RequestContext(request))def singleProduct_view(request,id_prod): prod = producto.objects.get(id=id_prod) cats = prod.categorias.all() # Obteniendo las categorias del producto encontrado ctx = {'producto':prod,'categorias':cats} return render_to_response('home/SingleProducto.html',ctx,context_instance=RequestContext(request))@login_required(login_url=URL_LOGIN)def contacto_view(request): info_enviado = False # Definir si se envio la informacion o no se envio email = "" titulo = "" texto = "" if request.method == "POST": formulario = ContactForm(request.POST) if formulario.is_valid(): info_enviado = True email = formulario.cleaned_data['Email'] titulo = formulario.cleaned_data['Titulo'] texto = formulario.cleaned_data['Texto'] # Configuracion enviando mensaje via GMAIL to_admin = 'alexexc2@gmail.com' html_content = "Informacion recibida de [%s] <br><br><br>***Mensaje****<br><br>%s"%(email,texto) msg = EmailMultiAlternatives('Correo de Contacto',html_content,'from@server.com',[to_admin]) msg.attach_alternative(html_content,'text/html') # Definimos el contenido como HTML msg.send() # Enviamos en correo else: formulario = ContactForm() ctx = {'form':formulario,'email':email,'titulo':titulo,'texto':texto,'info_enviado':info_enviado} return render_to_response('home/contacto.html',ctx,context_instance=RequestContext(request))def login_view(request): mensaje = "" if request.user.is_authenticated(): return HttpResponseRedirect('/') else: if request.method == "POST": form = LoginForm(request.POST) if form.is_valid(): next = request.POST['next'] username = form.cleaned_data['username'] password = form.cleaned_data['password'] usuario = authenticate(username=username,password=password) if usuario is not None and usuario.is_active: login(request,usuario) return HttpResponseRedirect(next) else: mensaje = "usuario y/o password incorrecto" next = request.REQUEST.get('next') form = LoginForm() ctx = {'form':form,'mensaje':mensaje,'next':next} return render_to_response('home/login.html',ctx,context_instance=RequestContext(request))def logout_view(request): logout(request) return HttpResponseRedirect('/')def register_view(request): form = RegisterForm() if request.method == "POST": form = RegisterForm(request.POST) if form.is_valid(): usuario = form.cleaned_data['username'] email = form.cleaned_data['email'] password_one = form.cleaned_data['password_one'] password_two = form.cleaned_data['password_two'] u = User.objects.create_user(username=usuario,email=email,password=password_one) u.save() # Guardar el objeto return render_to_response('home/thanks_register.html',context_instance=RequestContext(request)) else: ctx = {'form':form} return render_to_response('home/register.html',ctx,context_instance=RequestContext(request)) ctx = {'form':form} return render_to_response('home/register.html',ctx,context_instance=RequestContext(request))
三.login.html
{% extends "base.html" %}{% block title %} Login {% endblock %}{% block content %}<form action="." method="POST"> {% csrf_token %} {{ mensaje }} {{ form.as_p }} {% if next %} <input type="hidden" value="{{next}}" name="next"> {% else %} <input type="hidden" value="/" name="next"> {% endif %} <button class="btn btn-primary" type="submit"> Login </button> <h5>Registrarte <a href="/registro/">aquí</a></h5></form>{% endblock %}
- 十八 Django 1.5.4 login_required
- django @login_required
- 【Django】@login_required用法简介
- Django 登陆访问权限@login_required
- Django登陆访问限制@login_required
- 令Django 视图有默认 login_required
- 二十四. Django认证系统中的@login_required
- Django 用户登陆访问限制 @login_required
- django中如何使用login_required来解决登陆的麻烦
- Django用户认证系统 authentication system----登陆访问限制@login_required
- django自定义用户认证后进不了带有@login_required的页面
- 基于 Django1.10 文档的深入学习(33)—— Using the Django authentication system 之login_required和LogiRequiredMixin
- 十八
- 十八
- 十八
- 一 Django 1.5.4 入门
- 三 Django 1.5.4 TinyMCE
- 四 Django 1.5.4 ImageField
- 算法2013110702
- 求A/B高精度值
- 串口常用参数
- NoSql背景与历史
- ubuntu sublime2 安装
- 十八 Django 1.5.4 login_required
- 九九乘法表 的变态写法
- MFC 自定义消息实现与响应
- java学习笔记
- POJ 1469 COURSES (二分匹配) - from lanshui_Yang
- 收录:前端面试题
- 达林顿管,达林顿管原理
- 明明的随机数
- 使用SurfaceView完成地图无缝拼接