diff options
-rw-r--r-- | api.py | 8 | ||||
-rw-r--r-- | blog/admin.py | 4 | ||||
-rw-r--r-- | blog/urls.py | 14 | ||||
-rw-r--r-- | blog/views.py | 22 | ||||
-rw-r--r-- | elgarito/__init__.py | 0 | ||||
-rw-r--r-- | elgarito/urls.py | 33 | ||||
-rw-r--r-- | elgarito/wsgi.py | 14 | ||||
-rw-r--r-- | encuestas/admin.py | 4 | ||||
-rw-r--r-- | encuestas/models.py | 7 | ||||
-rw-r--r-- | encuestas/urls.py | 12 | ||||
-rw-r--r-- | encuestas/views.py | 12 | ||||
-rw-r--r-- | fotos/admin.py | 4 | ||||
-rw-r--r-- | fotos/views.py | 22 | ||||
-rw-r--r--[-rwxr-xr-x] | manage.py | 15 | ||||
-rw-r--r-- | principal/views.py | 2 | ||||
-rw-r--r-- | servicios/xmlrpc.py | 13 | ||||
-rw-r--r-- | setup.py | 2 | ||||
-rw-r--r-- | tablon/admin.py | 4 | ||||
-rw-r--r-- | tablon/decorators.py | 23 | ||||
-rw-r--r-- | tablon/urls.py | 16 | ||||
-rw-r--r-- | tablon/views.py | 29 | ||||
-rw-r--r-- | templates/base.html | 10 | ||||
-rw-r--r-- | templates/registration/login.html | 2 | ||||
-rw-r--r-- | urls.py | 15 | ||||
-rw-r--r-- | usuarios/admin.py | 2 | ||||
-rw-r--r-- | usuarios/models.py | 10 | ||||
-rw-r--r-- | usuarios/urls.py | 19 | ||||
-rw-r--r-- | usuarios/views.py | 17 | ||||
-rw-r--r-- | wiki/admin.py | 2 | ||||
-rw-r--r-- | wiki/urls.py | 20 | ||||
-rw-r--r-- | wiki/views.py | 23 |
31 files changed, 238 insertions, 142 deletions
@@ -3,14 +3,16 @@ from tastypie.resources import ModelResource from tastypie import fields -from elgarito.encuestas.models import Encuesta, Respuesta, VotoUsuario -from elgarito.tablon.models import Mensaje +from encuestas.models import Encuesta, Respuesta +from tablon.models import Mensaje + class RespuestaResource(ModelResource): class Meta: queryset = Respuesta.objects.all() resource_name = 'respuesta' + class EncuestaResource(ModelResource): class Meta: queryset = Encuesta.objects.all() @@ -21,8 +23,8 @@ class EncuestaResource(ModelResource): resource_name = 'encuesta' + class MensajeResource(ModelResource): class Meta: queryset = Mensaje.objects.all() resource_name = 'mensaje' - diff --git a/blog/admin.py b/blog/admin.py index b6b7835..7455800 100644 --- a/blog/admin.py +++ b/blog/admin.py @@ -1,12 +1,14 @@ # vim: set fileencoding=utf-8 ts=4 shiftwidth=4 softtabstop=4 expandtab: from django.contrib import admin -from elgarito.blog.models import Articulo, Comentario +from blog.models import Articulo, Comentario + class ArticuloAdmin(admin.ModelAdmin): list_display = ('titulo', 'autor', 'created_on') admin.site.register(Articulo, ArticuloAdmin) + class ComentarioAdmin(admin.ModelAdmin): list_display = ('texto', 'autor', 'created_on') diff --git a/blog/urls.py b/blog/urls.py index b04d4cd..04324df 100644 --- a/blog/urls.py +++ b/blog/urls.py @@ -1,9 +1,11 @@ -from django.conf.urls.defaults import * +from django.conf.urls import patterns, url -urlpatterns = patterns('elgarito.blog.views', - (r'^$', 'index'), +urlpatterns = patterns( + 'blog.views', + + url(r'^$', 'index'), - (r'^(?P<articulo_id>\d+)/$', 'articulo'), - (r'^nuevo/$', 'nuevo'), - (r'^(?P<articulo_id>\d+)/crear_comentario/$', 'crear_comentario'), + url(r'^(?P<articulo_id>\d+)/$', 'articulo'), + url(r'^nuevo/$', 'nuevo'), + url(r'^(?P<articulo_id>\d+)/crear_comentario/$', 'crear_comentario'), ) diff --git a/blog/views.py b/blog/views.py index ac56d21..182905b 100644 --- a/blog/views.py +++ b/blog/views.py @@ -1,15 +1,17 @@ -from elgarito.blog.models import Articulo, ArticuloForm, Comentario, ComentarioForm +from blog.models import Articulo, ArticuloForm, Comentario, ComentarioForm from django.shortcuts import render_to_response, get_object_or_404 from django.template import RequestContext from django.http import HttpResponseRedirect from django.contrib.auth.decorators import user_passes_test + def index(request): lista_articulos = Articulo.objects.all() return render_to_response('blog/index.html', RequestContext(request, { 'lista_articulos': lista_articulos})) + def articulo(request, articulo_id): articulo = get_object_or_404(Articulo, pk=articulo_id) lista_comentarios = Comentario.objects.filter(articulo__pk=articulo_id) @@ -21,27 +23,29 @@ def articulo(request, articulo_id): 'form': form, 'user': request.user})) + @user_passes_test(lambda u: u.has_perm('blog.can_add_comentario'), login_url='/usuarios/login/') def crear_comentario(request, articulo_id): articulo = get_object_or_404(Articulo, pk=articulo_id) comentario = Comentario(id=None, - texto = request.POST['texto'], - autor = request.user, - articulo = articulo, - ) + texto=request.POST['texto'], + autor=request.user, + articulo=articulo, + ) comentario.save() return HttpResponseRedirect('/blog/%s/' % articulo_id) + @user_passes_test(lambda u: u.has_perm('blog.can_add_articulo'), login_url='/usuarios/login/') def nuevo(request): if request.POST: articulo = Articulo(id=None, - titulo = request.POST['titulo'], - texto = request.POST['texto'], - autor = request.user, - ) + titulo=request.POST['titulo'], + texto=request.POST['texto'], + autor=request.user, + ) articulo.save() return HttpResponseRedirect('/blog/%s/' % articulo.id) else: diff --git a/elgarito/__init__.py b/elgarito/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/elgarito/__init__.py diff --git a/elgarito/urls.py b/elgarito/urls.py new file mode 100644 index 0000000..bff076c --- /dev/null +++ b/elgarito/urls.py @@ -0,0 +1,33 @@ +from django.conf.urls import patterns, include, url +#from django.views.generic.simple import redirect_to + +from django.contrib import admin +admin.autodiscover() + +urlpatterns = patterns( + '', + # Examples: + # url(r'^$', 'elgarito.views.home', name='home'), + # url(r'^blog/', include('blog.urls')), + + url(r'^$', 'principal.views.index'), + + url(r'^blog/', include('blog.urls')), + url(r'^tablon/', include('tablon.urls')), + url(r'^wiki/', include('wiki.urls')), + url(r'^usuarios/', include('usuarios.urls')), + url(r'^usuario/(?P<usuario_id>\w+)/$', 'usuarios.views.ver'), + url(r'^accounts/profile/$', 'usuarios.views.mi_perfil'), + #(r'^fotos/$', redirect_to, {'url': '/fotos/gallery'}), + url(r'^fotos/', include('photologue.urls')), + url(r'^encuestas/', include('encuestas.urls')), + + url(r'^eventos/', 'wiki.views.pagina', {'titulo': 'Eventos', 'static': 'eventos'}), + url(r'^eventos/editar', 'wiki.views.editar', {'titulo': 'Eventos', 'static': 'eventos'}), + url(r'^labuenakno/', 'wiki.views.pagina', {'titulo': 'LaBuenaKno', 'static': 'labuenakno'}), + url(r'^labuenakno/editar', 'wiki.views.editar', {'titulo': 'LaBuenaKno', 'static': 'labuenakno'}), + url(r'^enlaces/', 'wiki.views.pagina', {'titulo': 'Enlaces', 'static': 'enlaces'}), + url(r'^enlaces/editar', 'wiki.views.editar', {'titulo': 'Enlaces', 'static': 'enlaces'}), + + url(r'^admin/', include(admin.site.urls)), +) diff --git a/elgarito/wsgi.py b/elgarito/wsgi.py new file mode 100644 index 0000000..2529520 --- /dev/null +++ b/elgarito/wsgi.py @@ -0,0 +1,14 @@ +""" +WSGI config for elgarito project. + +It exposes the WSGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/1.6/howto/deployment/wsgi/ +""" + +import os +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "elgarito.settings") + +from django.core.wsgi import get_wsgi_application +application = get_wsgi_application() diff --git a/encuestas/admin.py b/encuestas/admin.py index e298448..ae9f44e 100644 --- a/encuestas/admin.py +++ b/encuestas/admin.py @@ -1,6 +1,7 @@ # vim: set fileencoding=utf-8 ts=4 shiftwidth=4 softtabstop=4 expandtab: from django.contrib import admin -from elgarito.encuestas.models import Encuesta, Respuesta, VotoUsuario +from encuestas.models import Encuesta, Respuesta, VotoUsuario + class EncuestaAdmin(admin.ModelAdmin): list_display = ( @@ -13,6 +14,7 @@ class EncuestaAdmin(admin.ModelAdmin): admin.site.register(Encuesta, EncuestaAdmin) + class RespuestaAdmin(admin.ModelAdmin): list_display = ( 'encuesta', diff --git a/encuestas/models.py b/encuestas/models.py index 8d54fef..c9d527b 100644 --- a/encuestas/models.py +++ b/encuestas/models.py @@ -1,10 +1,10 @@ # vim: set fileencoding=utf-8 ts=4 shiftwidth=4 softtabstop=4 expandtab: from django.db import models from django.contrib.auth.models import User -from django.contrib.auth.models import Group -from elgarito.tablon.models import Tema +from tablon.models import Tema from django.forms import ModelForm + class Encuesta(models.Model): pregunta = models.CharField(max_length=200) #descripcion @@ -16,13 +16,13 @@ class Encuesta(models.Model): tema = models.ForeignKey(Tema) #activa - def __repr__(self): return self.pregunta def __unicode__(self): return self.pregunta + class EncuestaForm(ModelForm): class Meta: model = Encuesta @@ -45,6 +45,7 @@ class Respuesta(models.Model): def ultimo_mensaje(self): return self.mensaje_set.latest() + class VotoUsuario(models.Model): usuario = models.ForeignKey(User) encuesta = models.ForeignKey(Encuesta) diff --git a/encuestas/urls.py b/encuestas/urls.py index ac2e286..b24e318 100644 --- a/encuestas/urls.py +++ b/encuestas/urls.py @@ -1,8 +1,10 @@ -from django.conf.urls.defaults import * +from django.conf.urls import patterns, url -urlpatterns = patterns('elgarito.encuestas.views', - (r'^$', 'index'), +urlpatterns = patterns( + 'encuestas.views', + + url(r'^$', 'index'), - (r'^votar/(?P<foro_id>\d+)/$', 'votar'), - (r'^ver/(?P<foro_id>\d+)/$', 'ver'), + url(r'^votar/(?P<foro_id>\d+)/$', 'votar'), + url(r'^ver/(?P<foro_id>\d+)/$', 'ver'), ) diff --git a/encuestas/views.py b/encuestas/views.py index e013d1a..6108e39 100644 --- a/encuestas/views.py +++ b/encuestas/views.py @@ -1,11 +1,8 @@ # vim: set fileencoding=utf-8 ts=4 shiftwidth=4 softtabstop=4 expandtab: -from elgarito.encuestas.models import Encuesta -from django.contrib.auth.models import User -from django.shortcuts import render_to_response, get_object_or_404 +from encuestas.models import Encuesta +from django.shortcuts import render_to_response from django.template import RequestContext -from django.http import HttpResponseRedirect -from django.contrib.auth.decorators import user_passes_test -from datetime import datetime + def index(request): lista_encuestas = Encuesta.objects.all() @@ -14,6 +11,7 @@ def index(request): 'lista_encuestas': lista_encuestas, })) + def ver(request): lista_encuestas = Encuesta.objects.all() return render_to_response('encuestas/index.html', @@ -21,10 +19,10 @@ def ver(request): 'lista_encuestas': lista_encuestas, })) + def votar(request): lista_encuestas = Encuesta.objects.all() return render_to_response('encuestas/index.html', RequestContext(request, { 'lista_encuestas': lista_encuestas, })) - diff --git a/fotos/admin.py b/fotos/admin.py index 8a5f94a..f5cc4cc 100644 --- a/fotos/admin.py +++ b/fotos/admin.py @@ -1,12 +1,14 @@ # vim: set fileencoding=utf-8 ts=4 shiftwidth=4 softtabstop=4 expandtab: from django.contrib import admin -from elgarito.fotos.models import Album, Foto +from fotos.models import Album, Foto + class AlbumAdmin(admin.ModelAdmin): list_display = ('nombre', 'autor', 'created_on') admin.site.register(Album, AlbumAdmin) + class FotoAdmin(admin.ModelAdmin): list_display = ('nombre', 'album', 'autor', 'created_on') diff --git a/fotos/views.py b/fotos/views.py index 6b0fd91..4288fc8 100644 --- a/fotos/views.py +++ b/fotos/views.py @@ -1,18 +1,24 @@ -from elgarito.fotos.models import Album, Foto, Tag -from django.shortcuts import render_to_response, get_object_or_404 +from fotos.models import Album +from django.shortcuts import render_to_response from django.template import RequestContext + def index(request): lista_albums = Album.objects.all() - return render_to_response('fotos/index.html', RequestContext(request, - {'lista_albums': lista_albums})) + return render_to_response('fotos/index.html', + RequestContext(request, + {'lista_albums': lista_albums})) + def album(request): lista_albums = Album.objects.all() - return render_to_response('fotos/index.html', RequestContext(request, - {'lista_albums': lista_albums})) + return render_to_response('fotos/index.html', + RequestContext(request, + {'lista_albums': lista_albums})) + def foto(request): lista_albums = Album.objects.all() - return render_to_response('fotos/index.html', RequestContext(request, - {'lista_albums': lista_albums})) + return render_to_response('fotos/index.html', + RequestContext(request, + {'lista_albums': lista_albums})) diff --git a/manage.py b/manage.py index 008aeeb..d101a4f 100755..100644 --- a/manage.py +++ b/manage.py @@ -1,11 +1,10 @@ #!/usr/bin/env python -from django.core.management import execute_manager -try: - import settings # Assumed to be in the same directory. -except ImportError: - import sys - sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n" % __file__) - sys.exit(1) +import os +import sys if __name__ == "__main__": - execute_manager(settings) + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "elgarito.settings") + + from django.core.management import execute_from_command_line + + execute_from_command_line(sys.argv) diff --git a/principal/views.py b/principal/views.py index 9ec7a8f..776112a 100644 --- a/principal/views.py +++ b/principal/views.py @@ -1,5 +1,5 @@ # Create your views here. -from elgarito.shortcuts import boilerplate_render +from shortcuts import boilerplate_render index = boilerplate_render('principal/index.html') diff --git a/servicios/xmlrpc.py b/servicios/xmlrpc.py index 995911c..51e2b68 100644 --- a/servicios/xmlrpc.py +++ b/servicios/xmlrpc.py @@ -7,7 +7,7 @@ from SimpleXMLRPCServer import SimpleXMLRPCDispatcher from django.http import HttpResponse -from elgarito.blog.models import Articulo +from blog.models import Articulo dispatcher = SimpleXMLRPCDispatcher(allow_none=False, encoding=None) @@ -32,7 +32,7 @@ def rpc_handler(request): for method in methods: sig = dispatcher.system_methodSignature(method) - help = dispatcher.system_methodHelp(method) + help = dispatcher.system_methodHelp(method) response.write("<li><b>%s</b>: [%s] %s</li>" % (method, sig, help)) response.write("</ul>") @@ -40,6 +40,7 @@ def rpc_handler(request): response['Content-length'] = str(len(response.content)) return response + def articulos_blog(max=10): """ Devuelve los últimos artículos del blog. Admite un argumento, que indica el @@ -49,10 +50,10 @@ def articulos_blog(max=10): lista = [] for a in articulos: lista.append({ - "titulo" : a.titulo, - "autor" : a.autor.username, - "created_on" : a.created_on.__str__(), - "texto" :a.texto + "titulo": a.titulo, + "autor": a.autor.username, + "created_on": a.created_on.__str__(), + "texto": a.texto }) return lista dispatcher.register_function(articulos_blog, 'articulos_blog') @@ -13,7 +13,7 @@ setup( 'django', 'django-oembed', 'django-photologue', - 'django-tastypie', + 'djangorestframework', 'markdown', 'PIL', ], diff --git a/tablon/admin.py b/tablon/admin.py index 66b22bb..fea74be 100644 --- a/tablon/admin.py +++ b/tablon/admin.py @@ -1,6 +1,6 @@ # vim: set fileencoding=utf-8 ts=4 shiftwidth=4 softtabstop=4 expandtab: from django.contrib import admin -from elgarito.tablon.models import Foro, Tema, Mensaje, PermisoForo +from tablon.models import Foro, Tema, Mensaje, PermisoForo class ForoAdmin(admin.ModelAdmin): @@ -13,6 +13,7 @@ class ForoAdmin(admin.ModelAdmin): admin.site.register(Foro, ForoAdmin) + class TemaAdmin(admin.ModelAdmin): list_display = ( 'titulo', @@ -37,6 +38,7 @@ class MensajeAdmin(admin.ModelAdmin): admin.site.register(Mensaje, MensajeAdmin) + class PermisoForoAdmin(admin.ModelAdmin): list_display = ( 'foro', diff --git a/tablon/decorators.py b/tablon/decorators.py index 06d9501..aeff66a 100644 --- a/tablon/decorators.py +++ b/tablon/decorators.py @@ -1,8 +1,8 @@ # vim: set fileencoding=utf-8 ts=4 shiftwidth=4 softtabstop=4 expandtab: -from elgarito.tablon.models import Tema,Foro -from elgarito.usuarios.models import UserProfile +from tablon.models import Tema, Foro from django.http import HttpResponseForbidden, HttpResponseRedirect + def foro_can(permission): """ Decorator que comprueba los permisos del usuario para leer/escribir en un foro @@ -10,21 +10,23 @@ def foro_can(permission): def _dec(view_func): def _foro_can(request, *args, **kwargs): if permission == 'read': - if Foro.objects.get(id=kwargs['foro_id']).global_read == True: + if Foro.objects.get(id=kwargs['foro_id']).global_read is True: return view_func(request, *args, **kwargs) if request.user.is_anonymous(): - return HttpResponseRedirect('/usuarios/login/?next=%s' % request.path) + return HttpResponseRedirect('/usuarios/login/?next=%s' % request.path) if permission == 'write': - if Foro.objects.get(id=kwargs['foro_id']).global_write == True: + if Foro.objects.get(id=kwargs['foro_id']).global_write is True: return view_func(request, *args, **kwargs) if request.user.get_profile().foro_can(permission, kwargs['foro_id']): return view_func(request, *args, **kwargs) - return HttpResponseForbidden('<h1>No tiene suficientes permisos para realizar esta operación (%s).</h1>' % (permission)) + return HttpResponseForbidden('<h1>No tiene suficientes permisos para realizar esta operación (%s).</h1>' % + (permission)) _foro_can.__doc__ = view_func.__doc__ _foro_can.__dict__ = view_func.__dict__ return _foro_can return _dec + def tema_can(permission): """ Decorator que comprueba los permisos del usuario para leer/contestar un tema @@ -33,16 +35,17 @@ def tema_can(permission): def _tema_can(request, *args, **kwargs): foro_id = Tema.objects.get(id=kwargs['tema_id']).foro_id if permission == 'read': - if Foro.objects.get(id=foro_id).global_read == True: + if Foro.objects.get(id=foro_id).global_read is True: return view_func(request, *args, **kwargs) if not request.user.is_authenticated(): - return HttpResponseRedirect('/usuarios/login/?next=%s' % request.path) + return HttpResponseRedirect('/usuarios/login/?next=%s' % request.path) if permission == 'write': - if Foro.objects.get(id=foro_id).global_write == True: + if Foro.objects.get(id=foro_id).global_write is True: return view_func(request, *args, **kwargs) if request.user.get_profile().foro_can(permission, foro_id): return view_func(request, *args, **kwargs) - return HttpResponseForbidden('<h1>No tiene suficientes permisos para realizar esta operación (%s).</h1>' % (permission)) + return HttpResponseForbidden('<h1>No tiene suficientes permisos para realizar esta operación (%s).</h1>' % + (permission)) _tema_can.__doc__ = view_func.__doc__ _tema_can.__dict__ = view_func.__dict__ return _tema_can diff --git a/tablon/urls.py b/tablon/urls.py index 71fc677..065df8b 100644 --- a/tablon/urls.py +++ b/tablon/urls.py @@ -1,11 +1,13 @@ -from django.conf.urls.defaults import * +from django.conf.urls import patterns, url -urlpatterns = patterns('elgarito.tablon.views', - (r'^$', 'index'), +urlpatterns = patterns( + 'tablon.views', + + url(r'^$', 'index'), - (r'^foro/(?P<foro_id>\d+)/$', 'foro'), - (r'^foro/(?P<foro_id>\d+)/nuevo_tema/$', 'nuevo_tema'), + url(r'^foro/(?P<foro_id>\d+)/$', 'foro'), + url(r'^foro/(?P<foro_id>\d+)/nuevo_tema/$', 'nuevo_tema'), - (r'^tema/(?P<tema_id>\d+)/$', 'tema'), - (r'^tema/(?P<tema_id>\d+)/responder/$', 'responder'), + url(r'^tema/(?P<tema_id>\d+)/$', 'tema'), + url(r'^tema/(?P<tema_id>\d+)/responder/$', 'responder'), ) diff --git a/tablon/views.py b/tablon/views.py index 3834113..3e0c851 100644 --- a/tablon/views.py +++ b/tablon/views.py @@ -1,12 +1,11 @@ # vim: set fileencoding=utf-8 ts=4 shiftwidth=4 softtabstop=4 expandtab: -from elgarito.tablon.models import Foro, Tema, Mensaje, MensajeForm, Visita -from elgarito.tablon.decorators import * -from django.contrib.auth.models import User +from tablon.models import Foro, Tema, Mensaje, MensajeForm, Visita +from tablon.decorators import foro_can, tema_can from django.shortcuts import render_to_response, get_object_or_404 from django.template import RequestContext from django.http import HttpResponseRedirect -from django.contrib.auth.decorators import user_passes_test -from datetime import datetime +from django.utils import timezone + def index(request): lista_foros = Foro.objects.all() @@ -15,6 +14,7 @@ def index(request): 'lista_foros': lista_foros, })) + @foro_can('read') def foro(request, foro_id): foro = get_object_or_404(Foro, pk=foro_id) @@ -25,6 +25,7 @@ def foro(request, foro_id): 'lista_temas': lista_temas, })) + @tema_can('read') def tema(request, tema_id): tema = get_object_or_404(Tema, pk=tema_id) @@ -34,17 +35,17 @@ def tema(request, tema_id): try: v = Visita.objects.get(usuario=request.user.id, tema=tema_id) ult_visita = v.fecha - v.fecha = datetime.now() + v.fecha = timezone.now() except Visita.DoesNotExist: v = Visita(usuario=request.user, tema=tema) - ult_visita = datetime.min - v.save(); + ult_visita = timezone.min + v.save() else: - ult_visita = datetime.now() + ult_visita = timezone.now() visitados = {} for m in lista_mensajes: if (m.created_on > ult_visita): - visitados[m.id] = 1; + visitados[m.id] = 1 return render_to_response('tablon/tema.html', RequestContext(request, { @@ -55,6 +56,7 @@ def tema(request, tema_id): 'visitados': visitados, })) + @foro_can('write') def nuevo_tema(request, foro_id): if request.POST: @@ -64,14 +66,14 @@ def nuevo_tema(request, foro_id): titulo=request.POST['titulo'], foro=foro, autor=usuario, - ) + ) tema.save() mensaje = Mensaje(id=None, titulo=request.POST['titulo'], texto=request.POST['texto'], tema=tema, autor=usuario, - ) + ) mensaje.save() return HttpResponseRedirect('/tablon/tema/%s/' % tema.id) else: @@ -83,6 +85,7 @@ def nuevo_tema(request, foro_id): 'foro': foro, })) + @tema_can('write') def responder(request, tema_id): if request.POST: @@ -92,7 +95,7 @@ def responder(request, tema_id): texto=request.POST['texto'], tema=tema, autor=request.user, - ) + ) mensaje.save() return HttpResponseRedirect('/tablon/tema/%s/' % tema.id) diff --git a/templates/base.html b/templates/base.html index 141fee5..7a11db6 100644 --- a/templates/base.html +++ b/templates/base.html @@ -3,11 +3,11 @@ <meta charset="utf-8"> <title>{% block title %}El Garito{% endblock %}</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <link rel="StyleSheet" href="/static/estilos/bootstrap.min.css" type="text/css" /> - <link rel="StyleSheet" href="/static/estilos/bootstrap-responsive.min.css" type="text/css" /> - <link rel="StyleSheet" href="/static/estilos/elgarito.css" type="text/css" /> - <link rel="SHORTCUT ICON" href="/static/images/favicon.ico" /> - <link rel="icon" href="/static/images/favicon.ico" type="image/vnd.microsoft.icon" /> + <link rel="StyleSheet" href="{{ STATIC_URL }}estilos/bootstrap.min.css" type="text/css" /> + <link rel="StyleSheet" href="{{ STATIC_URL }}estilos/bootstrap-responsive.min.css" type="text/css" /> + <link rel="StyleSheet" href="{{ STATIC_URL }}estilos/elgarito.css" type="text/css" /> + <link rel="SHORTCUT ICON" href="{{ STATIC_URL }}images/favicon.ico" /> + <link rel="icon" href="{{ STATIC_URL }}images/favicon.ico" type="image/vnd.microsoft.icon" /> {% block extra_header %} {% endblock %} </head> diff --git a/templates/registration/login.html b/templates/registration/login.html index da38bd9..2e022d2 100644 --- a/templates/registration/login.html +++ b/templates/registration/login.html @@ -7,7 +7,7 @@ {% block content %} <h2>Por favor introduce tu nombre de usuario y contraseña</h2> -<form method="post" class="form" action="{% url django.contrib.auth.views.login %}"> +<form method="post" class="form" action="{% url "django.contrib.auth.views.login" %}"> {% csrf_token %} {{ form|bootstrap }} @@ -3,13 +3,13 @@ from django.conf import settings from django.conf.urls.defaults import * from django.views.generic.simple import redirect_to from django.contrib import admin -from tastypie.api import Api -from elgarito.api import EncuestaResource, RespuestaResource, MensajeResource +#from tastypie.api import Api +#from api import EncuestaResource, RespuestaResource, MensajeResource -v1_api = Api(api_name='v1') -v1_api.register(EncuestaResource()) -v1_api.register(RespuestaResource()) -v1_api.register(MensajeResource()) +#v1_api = Api(api_name='v1') +#v1_api.register(EncuestaResource()) +#v1_api.register(RespuestaResource()) +#v1_api.register(MensajeResource()) admin.autodiscover() @@ -50,5 +50,6 @@ urlpatterns = patterns( (r'^servicios/', include('elgarito.servicios.urls')), # API - (r'^api/', include(v1_api.urls)), + #(r'^api/', include(v1_api.urls)), + url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')), ) diff --git a/usuarios/admin.py b/usuarios/admin.py index e6ce5ba..6ff171f 100644 --- a/usuarios/admin.py +++ b/usuarios/admin.py @@ -1,7 +1,7 @@ # vim: set fileencoding=utf-8 ts=4 shiftwidth=4 softtabstop=4 expandtab: from django.contrib import admin -from elgarito.usuarios.models import UserProfile +from usuarios.models import UserProfile class UserProfileAdmin(admin.ModelAdmin): diff --git a/usuarios/models.py b/usuarios/models.py index 3f5b3c7..f63de7a 100644 --- a/usuarios/models.py +++ b/usuarios/models.py @@ -1,9 +1,10 @@ # vim: set fileencoding=utf-8 ts=4 shiftwidth=4 softtabstop=4 expandtab: -from elgarito.tablon.models import PermisoForo +from tablon.models import PermisoForo from django.db import models from django.contrib.auth.models import User from django import forms + class UserProfile(models.Model): user = models.OneToOneField(User) show_email = models.BooleanField("Mostrar e-mail", blank=True) @@ -29,24 +30,27 @@ class UserProfile(models.Model): pass return False + class UserProfileForm(forms.ModelForm): class Meta: model = UserProfile - exclude = ('user') + exclude = ('user',) + class UserForm(forms.ModelForm): class Meta: model = User fields = ('first_name', 'last_name', 'email') + class UserProfileCreateForm(forms.ModelForm): class Meta: model = UserProfile fields = ('show_email', 'url', 'msn_id', 'jabber_id', 'imagen') + class UserCreateForm(forms.ModelForm): class Meta: model = User fields = ('username', 'password', 'first_name', 'last_name', 'email') - diff --git a/usuarios/urls.py b/usuarios/urls.py index 2b09146..1552882 100644 --- a/usuarios/urls.py +++ b/usuarios/urls.py @@ -1,14 +1,15 @@ -from django.conf.urls.defaults import * +from django.conf.urls import patterns, url -urlpatterns = patterns('', - (r'^$', 'elgarito.usuarios.views.index'), +urlpatterns = patterns( + '', + url(r'^$', 'usuarios.views.index'), - (r'^lista/$', 'elgarito.usuarios.views.lista'), - (r'^nuevo/$', 'elgarito.usuarios.views.nuevo'), - (r'^ver/(?P<usuario_id>\w+)/$', 'elgarito.usuarios.views.ver'), - (r'^mi_perfil/$', 'elgarito.usuarios.views.mi_perfil'), + url(r'^lista/$', 'usuarios.views.lista'), + url(r'^nuevo/$', 'usuarios.views.nuevo'), + url(r'^ver/(?P<usuario_id>\w+)/$', 'usuarios.views.ver'), + url(r'^mi_perfil/$', 'usuarios.views.mi_perfil'), - (r'^login/', 'django.contrib.auth.views.login'), - (r'^logout/', 'django.contrib.auth.views.logout'), + url(r'^login/', 'django.contrib.auth.views.login'), + url(r'^logout/', 'django.contrib.auth.views.logout'), ) diff --git a/usuarios/views.py b/usuarios/views.py index 331cfae..48b5cd7 100644 --- a/usuarios/views.py +++ b/usuarios/views.py @@ -1,5 +1,5 @@ # vim: set fileencoding=utf-8 ts=4 shiftwidth=4 softtabstop=4 expandtab: -from elgarito.usuarios.models import UserProfile, UserProfileForm, UserForm +from usuarios.models import UserProfile, UserProfileForm, UserForm from django.contrib.auth.forms import UserCreationForm from django.contrib.auth.models import User from django.shortcuts import render_to_response, get_object_or_404 @@ -7,9 +7,11 @@ from django.template import RequestContext from django.contrib.auth.decorators import user_passes_test from django.http import HttpResponseRedirect + def index(request): return lista(request) + def lista(request): lista_usuarios = User.objects.all() return render_to_response('usuarios/lista.html', @@ -18,6 +20,7 @@ def lista(request): 'user': request.user, })) + def ver(request, usuario_id): usuario = get_object_or_404(User, username=usuario_id) if usuario == request.user: @@ -30,6 +33,7 @@ def ver(request, usuario_id): 'show_edit': show_edit })) + def nuevo(request): """Crear un nuevo usuario""" # Si el usuario ya está autenticado lo redirigimos a su perfil @@ -38,16 +42,17 @@ def nuevo(request): # Si es un POST, creamos el usuario if request.POST: userform = UserCreationForm(request.POST) - user = userform.save() + userform.save() return HttpResponseRedirect('../mi_perfil/') # Si no es un POST, mostramos formulario para crear el usuario else: userform = UserCreationForm() return render_to_response('usuarios/nuevo.html', RequestContext(request, { - 'userform' : userform + 'userform': userform })) + @user_passes_test(lambda u: u.is_authenticated(), login_url='/usuarios/login/') def mi_perfil(request): @@ -57,7 +62,7 @@ def mi_perfil(request): profile = UserProfile.objects.get(user=request.user) except UserProfile.DoesNotExist: profile = UserProfile(user=request.user) - if request.POST.has_key('show_email'): + if 'show_email' in request.POST: profile.show_email = True else: profile.show_email = False @@ -83,7 +88,7 @@ def mi_perfil(request): form = UserProfileForm(instance=usuario) return render_to_response('usuarios/mi_perfil.html', RequestContext(request, { - 'userform' : userform, - 'form' : form, + 'userform': userform, + 'form': form, 'usuario': usuario })) diff --git a/wiki/admin.py b/wiki/admin.py index adb63d4..95835e8 100644 --- a/wiki/admin.py +++ b/wiki/admin.py @@ -1,6 +1,6 @@ # vim: set fileencoding=utf-8 ts=4 shiftwidth=4 softtabstop=4 expandtab: from django.contrib import admin -from elgarito.wiki.models import Pagina +from wiki.models import Pagina class PaginaAdmin(admin.ModelAdmin): diff --git a/wiki/urls.py b/wiki/urls.py index ddcddf3..07dd356 100644 --- a/wiki/urls.py +++ b/wiki/urls.py @@ -1,12 +1,14 @@ -from django.conf.urls.defaults import * +from django.conf.urls import patterns, url -urlpatterns = patterns('elgarito.wiki.views', - (r'^$', 'index'), +urlpatterns = patterns( + 'wiki.views', + + url(r'^$', 'index'), - #(r'^((?:[A-Z]+[a-z]+){2,})/$', 'pagina'), - (r'^nueva/$', 'nueva'), - (r'^lista/$', 'lista'), - (r'^(?P<titulo>\w+)/$', 'pagina'), - (r'^(?P<titulo>\w+)/editar/$', 'editar'), - #(r'^(?P<titulo>\w+)/eliminar/$', 'eliminar'), + #url(r'^((?:[A-Z]+[a-z]+){2,})/$', 'pagina'), + url(r'^nueva/$', 'nueva'), + url(r'^lista/$', 'lista'), + url(r'^(?P<titulo>\w+)/$', 'pagina'), + url(r'^(?P<titulo>\w+)/editar/$', 'editar'), + #url(r'^(?P<titulo>\w+)/eliminar/$', 'eliminar'), ) diff --git a/wiki/views.py b/wiki/views.py index 9d5ac78..a214690 100644 --- a/wiki/views.py +++ b/wiki/views.py @@ -1,13 +1,15 @@ # vim: set fileencoding=utf-8 ts=4 shiftwidth=4 softtabstop=4 expandtab: -from elgarito.wiki.models import Pagina, PaginaForm -from django.shortcuts import render_to_response, get_object_or_404 +from wiki.models import Pagina, PaginaForm +from django.shortcuts import render_to_response from django.template import RequestContext from django.http import HttpResponseRedirect from django.contrib.auth.decorators import user_passes_test + def index(request): return HttpResponseRedirect('/wiki/Portada/') + def lista(request): lista_paginas = Pagina.objects.all() return render_to_response('wiki/lista.html', @@ -15,6 +17,7 @@ def lista(request): 'lista_paginas': lista_paginas })) + def pagina(request, titulo, static=None): try: pagina = Pagina.objects.get(titulo__exact=titulo) @@ -24,9 +27,10 @@ def pagina(request, titulo, static=None): 'static': static, })) except Pagina.DoesNotExist: - pagina = Pagina(titulo = titulo) + pagina = Pagina(titulo=titulo) return HttpResponseRedirect('/wiki/' + pagina.titulo + '/editar/') + @user_passes_test(lambda u: u.has_perm('wiki.can_editar_pagina'), login_url='/usuarios/login/') def editar(request, titulo, static=None): @@ -39,7 +43,7 @@ def editar(request, titulo, static=None): pagina.texto = request.POST['texto'] pagina.autor_id = request.user.id pagina.save() - return HttpResponseRedirect('/wiki/' + pagina.titulo +'/') + return HttpResponseRedirect('/wiki/' + pagina.titulo + '/') else: try: pagina = Pagina.objects.get(titulo__exact=titulo) @@ -48,20 +52,21 @@ def editar(request, titulo, static=None): form = PaginaForm(instance=pagina) return render_to_response('wiki/editar.html', RequestContext(request, { - 'form' : form, + 'form': form, 'pagina': pagina, 'static': static, })) + @user_passes_test(lambda u: u.has_perm('wiki.can_add_pagina'), login_url='/usuarios/login/') def nueva(request): if request.POST: pagina = Pagina(id=None, - titulo = request.POST['titulo'], - texto = request.POST['texto'], - autor = request.user, - ) + titulo=request.POST['titulo'], + texto=request.POST['texto'], + autor=request.user, + ) pagina.save() return HttpResponseRedirect('/wiki/%s/' % pagina.titulo) else: |