def channels(request): # Comprobamos si el usuario quiere loguearse o desloguearse if do_login_logout(request): return HttpResponseRedirect(request.path) if request.user.is_authenticated(): if request.method == 'POST': # En el caso de que estemos en /canales if request.path == '/canales': rss = (str(request.POST)).split("'")[3] add_channel(request, rss) return HttpResponseRedirect(request.path) # En el caso de que estemos en /canales/(numero) else: # si salta la excepcion es porque no hay nada en el POST # y por tanto nos piden actualizar el canal. # si no salta la excepcion, entoces es porque # nos piden seguir una noticia try: action = (str(request.POST)).split("'")[1] except IndexError: # sacamos el numero del path num = (request.path).split('/')[2] try: channel = Channels.objects.get(id=num) except Channels.DoesNotExist: return HttpResponseNotFound('404 Not Found') rss = channel.RSS # Esta funcion tambien actualiza los canales add_channel(request, rss) return HttpResponseRedirect(request.path) # sacamos el link de la noticia y lo usamos como identificador new_link = (str(request.POST)).split("'")[3] try: record = News.objects.get(url=new_link) except News.DoesNotExist: return show_annotated_content( request, "Error: new's url does not found") #sacamos el id del ususario que se encuentra logueado try: user = User.objects.get(username=str(request.user)) except User.DoesNotExist: return show_annotated_content( request, "Error: User does not found") # Contamos el numero de noticias que sigue el user n = New_User.objects.filter(UserId=user.id) if len(n) == 10: delete_object = New_User.objects.get(id=n[0].id) delete_object.delete() # por defecto se incluye la noticia action = 'add' # comprobamos si la noticia se a incluido, en tal caso, debemos comprobar # si la ha incluido el user actual u otro new = New_User.objects.filter(NewId=record.id) if len(new) > 0: for n in new: if str(n.UserId) == str(user.id): action = 'donotadd' break if action == 'add': # Incluimos la noticia a la tabla de noticias seguidas follow_new = New_User(NewId=record.id, UserId=user.id, date=str(datetime.datetime.now())) follow_new.save() # Actualizamos la conf del user, si el usuario no existe, se crea su revista try: user_conf = User_Conf.objects.get( user_name=user.username) except User_Conf.DoesNotExist: create_user_conf(user.username) user_conf = User_Conf.objects.get( user_name=user.username) # Actualizazmos el user_conf del usuario user_conf.last_updated = str(datetime.datetime.now()) user_conf.save() return HttpResponseRedirect(request.path) elif request.method == 'GET': # En el caso de que estemos en /canales if request.path == '/canales': body = '' Channels_list = Channels.objects.all().order_by('last_updated') for channel in reversed(Channels_list): body += channel.presentation return show_annotated_content(request, body) # En el caso de que estemos en /canales/(numero) else: # sacamos el numero del path num = (request.path).split('/')[2] # contador para recorrer la tabla de noticias count = 1 # Sacamos el titulo del canal try: channel = Channels.objects.get(id=num) body = '<h2 class="title"><a href="' + channel.url + '">' + channel.title + '</a></h2>' + \ '<form name="input" action="" method="POST">' + \ '<input class="more" type="submit" value="Update">' + \ '</form>' + \ '<a href="' + channel.RSS + '">(canal)</a>' + \ '<br><br>' except Channels.DoesNotExist: return HttpResponseNotFound('404 Not Found') # mostramos las noticias con el ID del canal News_Channel_list = News_Channels.objects.filter(ChannelId=num) for New_Channel in reversed(News_Channel_list): new = News.objects.get(id=New_Channel.NewId) body += new.presentation return show_annotated_content(request, body) else: return HttpResponseNotAllowed('405 REQUEST METHOD NOT ALLOWED') # En caso de que no haya un user autenticado else: if request.method == 'POST': do_login_logout(request) return HttpResponseRedirect(request.path) else: return show_annotated_content(request, 'Please Login to enjoy this page')
def channels(request): # Comprobamos si el usuario quiere loguearse o desloguearse if do_login_logout(request): return HttpResponseRedirect(request.path) if request.user.is_authenticated(): if request.method == 'POST': # En el caso de que estemos en /canales if request.path == '/canales': rss = (str(request.POST)).split("'")[3] add_channel(request, rss) return HttpResponseRedirect(request.path) # En el caso de que estemos en /canales/(numero) else: # si salta la excepcion es porque no hay nada en el POST # y por tanto nos piden actualizar el canal. # si no salta la excepcion, entoces es porque # nos piden seguir una noticia try: action = (str(request.POST)).split("'")[1] except IndexError: # sacamos el numero del path num = (request.path).split('/')[2] try: channel = Channels.objects.get(id=num) except Channels.DoesNotExist: return HttpResponseNotFound('404 Not Found') rss = channel.RSS # Esta funcion tambien actualiza los canales add_channel(request, rss) return HttpResponseRedirect(request.path) # sacamos el link de la noticia y lo usamos como identificador new_link = (str(request.POST)).split("'")[3] try: record = News.objects.get(url=new_link) except News.DoesNotExist: return show_annotated_content(request, "Error: new's url does not found") #sacamos el id del ususario que se encuentra logueado try: user = User.objects.get(username=str(request.user)) except User.DoesNotExist: return show_annotated_content(request, "Error: User does not found") # Contamos el numero de noticias que sigue el user n = New_User.objects.filter(UserId=user.id) if len(n) == 10: delete_object = New_User.objects.get(id=n[0].id) delete_object.delete() # por defecto se incluye la noticia action = 'add' # comprobamos si la noticia se a incluido, en tal caso, debemos comprobar # si la ha incluido el user actual u otro new = New_User.objects.filter(NewId=record.id) if len(new) > 0: for n in new: if str(n.UserId) == str(user.id): action = 'donotadd' break if action == 'add': # Incluimos la noticia a la tabla de noticias seguidas follow_new = New_User(NewId=record.id, UserId=user.id, date=str(datetime.datetime.now())) follow_new.save() # Actualizamos la conf del user, si el usuario no existe, se crea su revista try: user_conf = User_Conf.objects.get(user_name=user.username) except User_Conf.DoesNotExist: create_user_conf(user.username) user_conf = User_Conf.objects.get(user_name=user.username) # Actualizazmos el user_conf del usuario user_conf.last_updated = str(datetime.datetime.now()) user_conf.save() return HttpResponseRedirect(request.path) elif request.method == 'GET': # En el caso de que estemos en /canales if request.path == '/canales': body = '' Channels_list = Channels.objects.all().order_by('last_updated') for channel in reversed(Channels_list): body += channel.presentation return show_annotated_content(request, body) # En el caso de que estemos en /canales/(numero) else: # sacamos el numero del path num = (request.path).split('/')[2] # contador para recorrer la tabla de noticias count = 1 # Sacamos el titulo del canal try: channel = Channels.objects.get(id=num) body = '<h2 class="title"><a href="' + channel.url + '">' + channel.title + '</a></h2>' + \ '<form name="input" action="" method="POST">' + \ '<input class="more" type="submit" value="Update">' + \ '</form>' + \ '<a href="' + channel.RSS + '">(canal)</a>' + \ '<br><br>' except Channels.DoesNotExist: return HttpResponseNotFound('404 Not Found') # mostramos las noticias con el ID del canal News_Channel_list = News_Channels.objects.filter(ChannelId=num) for New_Channel in reversed(News_Channel_list): new = News.objects.get(id=New_Channel.NewId) body += new.presentation return show_annotated_content(request, body) else: return HttpResponseNotAllowed('405 REQUEST METHOD NOT ALLOWED') # En caso de que no haya un user autenticado else: if request.method == 'POST': do_login_logout(request) return HttpResponseRedirect(request.path) else: return show_annotated_content(request, 'Please Login to enjoy this page')
def server(request, resource): if do_login_logout(request): return HttpResponseRedirect(request.path) body = '' if request.method == 'GET': # Me estan pidiendo el recurso / if resource == '': body = '' journals_list = User_Conf.objects.all().order_by('last_updated') for journal in journals_list: body = '<div class="post"> ' + \ '<h2 class="title"><a href="/' + journal.user_name + '">' + journal.journal_title + '</a></h2>' + \ '<div style="clear: both;"> </div>' + \ '<div class="entry">User: '******'</div>' + \ '<div class="entry">' + str(journal.last_updated) + '</div>' + \ '</div>' + body return show_annotated_content(request, body) else: # Se comprueba si el recurso que me piden coincide con algun /usuario existente try: user = User.objects.get(username=resource) except User.DoesNotExist: return HttpResponseNotFound('404 Not Found') # se procede a listar las noticias que sigue el usuario # Sacamos el id del usuario al que pertenece la revista try: user = User.objects.get(username=str(resource)) except User.DoesNotExist: return show_annotated_content(request, "Error: User does not found") # Nos quedamos solamente con el id de las noticias del usuario al que pertenece la revista news = New_User.objects.filter(UserId=user.id) for n in reversed(news): # Sacamos el canal para concatenar su titulo y su id en la presentacion de la noticia new_channel = News_Channels.objects.get(NewId=n.NewId) channel = Channels.objects.get(id=new_channel.ChannelId) # Sacamos la noticia para concatenar sus campos en la presentacion new = News.objects.get(id=str(n.NewId)) body += concatenate_new_presentation(request, channel.id, channel.title, new.id, new.title, new.contenido, new.url, new.PubDate, n.date) presentation = '<h3>Comments</h3><div class="post">' # Sacamos los comentarios que haya de esa revista y los preparamos en formato html comments = Comments.objects.filter( Users_Journal=str(request.path)[1:]) for n in reversed(comments): presentation += '<div class="entry">' + n.Comment + '</div>' body += presentation + '</div>' # Incluimos en el body, el formulario para comentarios, en caso de que sea un usuario logueado if request.user.is_authenticated(): body += '<form action="" method="post">' + \ 'Title:</br> <input type="text" name="title"></br>' + \ 'Comments:</br>' + \ '<textarea name="comments" id="comments" rows="8" cols="98">' + \ 'Hey... say something!' + \ '</textarea></br>' + \ '<input type="submit" value="Send" />' + \ '</form>' return show_annotated_content(request, body) # Dependiendo de lo que venga en la query haremos una cosa u otra elif request.method == 'POST': print(str(request.POST)) # Un user quiere cambiar el titulo de su revista if 'newtitle' in request.POST: new_title = (str(request.POST)).split("'")[6] user_conf = User_Conf.objects.get(user_name=request.user) user_conf.journal_title = new_title user_conf.save() return HttpResponseRedirect(request.path) # Un user quiere valorar una noticia elif 'like' in str(request.POST): print str(request.POST) # Por defecto es un like, por tanto se suma 1 score = 1 # Sacamos el id de la noticia que se esta valorando NewId = (str(request.POST)).split("'")[11] # Sacamos el id del user user = User.objects.get(username=str(request.user)) # Comprobamos si es like o dislike, y se sumara +1 o -1 respectivamente al contador if 'dislike' in str(request.POST): score = -1 # Comprobamos si la noticia se ha valorado antes, si no es asi, se crea un nuevo campo try: rating = likes.objects.get(NewId=NewId) except likes.DoesNotExist: new_rating = likes(UserId=user.id, Counter=score, NewId=NewId) new_rating.save() new_record = user_like(UserId=user.id, NewId=NewId) new_record.save() return HttpResponseRedirect(request.path) # Comprobamos si ese usuario ha puntuado esa noticia antes, para evitar que puntue varias veces record = user_like.objects.filter(NewId=NewId) for n in record: if str(n.UserId) == str(user.id): return HttpResponseRedirect(request.path) # Como no ha puntuado antes, sumamos el score y creamos un campo en el registro de likes rating.Counter = str(int(rating.Counter) + score) rating.save() new_record = user_like(UserId=user.id, NewId=NewId) new_record.save() return HttpResponseRedirect(request.path) # Un user ha enviado un comentario elif 'comments' in request.POST: # sacamos el id del usuario que envia el comentario user_name = str(request.user) user = User.objects.get(username=user_name) title = (str(request.POST)).split("'")[7] comment = (str(request.POST)).split("'")[3] comment_presentation = '<font size="3"><b>' + user_name + ':</b></font size></br>' + \ '(<b>' + title + '</b>): ' + comment # Incluimos el comentario en la tabla Comments new_comment = Comments(UserId=user.id, Comment=comment_presentation, Users_Journal=str(request.path)[1:]) new_comment.save() return HttpResponseRedirect(request.path) # Un user quiere personalizar el css elif 'personalize' in request.POST: new_color = (str(request.POST)).split("'")[3] new_font = (str(request.POST)).split("'")[7] new_back = (str(request.POST)).split("'")[15] # Sacamos el ID del user conectado user = User.objects.get(username=request.user) # Comprobamos si tiene una personalizacion antrior # si no, la creamos try: record = User_Custom.objects.get(UserId=user.id) except: new = User_Custom(UserId=user.id, background=new_back, font_size=new_font, color=new_color) new.save() return HttpResponseRedirect(request.path) record.background = new_back record.font_size = new_font record.color = new_color record.save() return HttpResponseRedirect(request.path) # Un user quiere seguir una noticia que se encuentra en una revista else: # sacamos el link de la noticia y lo usamos como identificador new_link = (str(request.POST)).split("'")[3] try: record = News.objects.get(url=new_link) except News.DoesNotExist: return show_annotated_content( request, "Error: new's url does not found") #sacamos el id del ususario que se encuentra logueado try: user = User.objects.get(username=str(request.user)) except User.DoesNotExist: return show_annotated_content(request, "Error: User does not found") # Comprobamos que el usuario no haya incluido esa noticia anterior mente News_list = New_User.objects.filter(UserId=user.id) for new in News_list: if int(new.NewId) == int(record.id): return HttpResponseRedirect(request.path) # Actualizamos la conf del user, si el usuario no existe, se crea su revista try: user_conf = User_Conf.objects.get(user_name=user.username) except User_Conf.DoesNotExist: create_user_conf(user.username) user_conf = User_Conf.objects.get(user_name=user.username) # Actualizazmos el user_conf del usuario user_conf.last_updated = str(datetime.datetime.now()) user_conf.save() # incluimos la noticia en la tabla de usuario/noticia follow_new = New_User(NewId=record.id, UserId=user.id, date=str(datetime.datetime.now())) follow_new.save() return HttpResponseRedirect(request.path) else: return HttpResponseNotAllowed('403 METHOD NOT ALLOWED')
def server(request, resource): if do_login_logout(request): return HttpResponseRedirect(request.path) body = '' if request.method == 'GET': # Me estan pidiendo el recurso / if resource == '': body = '' journals_list = User_Conf.objects.all().order_by('last_updated') for journal in journals_list: body = '<div class="post"> ' + \ '<h2 class="title"><a href="/' + journal.user_name + '">' + journal.journal_title + '</a></h2>' + \ '<div style="clear: both;"> </div>' + \ '<div class="entry">User: '******'</div>' + \ '<div class="entry">' + str(journal.last_updated) + '</div>' + \ '</div>' + body return show_annotated_content(request, body) else: # Se comprueba si el recurso que me piden coincide con algun /usuario existente try: user = User.objects.get(username=resource) except User.DoesNotExist: return HttpResponseNotFound('404 Not Found') # se procede a listar las noticias que sigue el usuario # Sacamos el id del usuario al que pertenece la revista try: user = User.objects.get(username=str(resource)) except User.DoesNotExist: return show_annotated_content(request, "Error: User does not found") # Nos quedamos solamente con el id de las noticias del usuario al que pertenece la revista news = New_User.objects.filter(UserId=user.id) for n in reversed(news): # Sacamos el canal para concatenar su titulo y su id en la presentacion de la noticia new_channel = News_Channels.objects.get(NewId=n.NewId) channel = Channels.objects.get(id=new_channel.ChannelId) # Sacamos la noticia para concatenar sus campos en la presentacion new = News.objects.get(id=str(n.NewId)) body += concatenate_new_presentation(request, channel.id, channel.title, new.id, new.title, new.contenido, new.url, new.PubDate, n.date) presentation = '<h3>Comments</h3><div class="post">' # Sacamos los comentarios que haya de esa revista y los preparamos en formato html comments = Comments.objects.filter(Users_Journal=str(request.path)[1:]) for n in reversed(comments): presentation += '<div class="entry">' + n.Comment + '</div>' body += presentation + '</div>' # Incluimos en el body, el formulario para comentarios, en caso de que sea un usuario logueado if request.user.is_authenticated(): body += '<form action="" method="post">' + \ 'Title:</br> <input type="text" name="title"></br>' + \ 'Comments:</br>' + \ '<textarea name="comments" id="comments" rows="8" cols="98">' + \ 'Hey... say something!' + \ '</textarea></br>' + \ '<input type="submit" value="Send" />' + \ '</form>' return show_annotated_content(request, body) # Dependiendo de lo que venga en la query haremos una cosa u otra elif request.method == 'POST': print (str(request.POST)) # Un user quiere cambiar el titulo de su revista if 'newtitle' in request.POST: new_title = (str(request.POST)).split("'")[6] user_conf = User_Conf.objects.get(user_name=request.user) user_conf.journal_title = new_title user_conf.save() return HttpResponseRedirect(request.path) # Un user quiere valorar una noticia elif 'like' in str(request.POST): print str(request.POST) # Por defecto es un like, por tanto se suma 1 score = 1 # Sacamos el id de la noticia que se esta valorando NewId = (str(request.POST)).split("'")[11] # Sacamos el id del user user = User.objects.get(username=str(request.user)) # Comprobamos si es like o dislike, y se sumara +1 o -1 respectivamente al contador if 'dislike' in str(request.POST): score = -1 # Comprobamos si la noticia se ha valorado antes, si no es asi, se crea un nuevo campo try: rating = likes.objects.get(NewId=NewId) except likes.DoesNotExist: new_rating = likes(UserId=user.id, Counter=score, NewId=NewId) new_rating.save() new_record = user_like(UserId=user.id, NewId=NewId) new_record.save() return HttpResponseRedirect(request.path) # Comprobamos si ese usuario ha puntuado esa noticia antes, para evitar que puntue varias veces record = user_like.objects.filter(NewId=NewId) for n in record: if str(n.UserId) == str(user.id): return HttpResponseRedirect(request.path) # Como no ha puntuado antes, sumamos el score y creamos un campo en el registro de likes rating.Counter = str(int(rating.Counter) + score) rating.save() new_record = user_like(UserId=user.id, NewId=NewId) new_record.save() return HttpResponseRedirect(request.path) # Un user ha enviado un comentario elif 'comments' in request.POST: # sacamos el id del usuario que envia el comentario user_name = str(request.user) user = User.objects.get(username=user_name) title = (str(request.POST)).split("'")[7] comment = (str(request.POST)).split("'")[3] comment_presentation = '<font size="3"><b>' + user_name + ':</b></font size></br>' + \ '(<b>' + title + '</b>): ' + comment # Incluimos el comentario en la tabla Comments new_comment = Comments(UserId=user.id, Comment=comment_presentation, Users_Journal=str(request.path)[1:]) new_comment.save() return HttpResponseRedirect(request.path) # Un user quiere personalizar el css elif 'personalize' in request.POST: new_color = (str(request.POST)).split("'")[3] new_font = (str(request.POST)).split("'")[7] new_back = (str(request.POST)).split("'")[15] # Sacamos el ID del user conectado user = User.objects.get(username=request.user) # Comprobamos si tiene una personalizacion antrior # si no, la creamos try: record = User_Custom.objects.get(UserId=user.id) except: new = User_Custom(UserId=user.id, background=new_back, font_size=new_font, color=new_color) new.save() return HttpResponseRedirect(request.path) record.background = new_back record.font_size = new_font record.color = new_color record.save() return HttpResponseRedirect(request.path) # Un user quiere seguir una noticia que se encuentra en una revista else: # sacamos el link de la noticia y lo usamos como identificador new_link = (str(request.POST)).split("'")[3] try: record = News.objects.get(url=new_link) except News.DoesNotExist: return show_annotated_content(request, "Error: new's url does not found") #sacamos el id del ususario que se encuentra logueado try: user = User.objects.get(username=str(request.user)) except User.DoesNotExist: return show_annotated_content(request, "Error: User does not found") # Comprobamos que el usuario no haya incluido esa noticia anterior mente News_list = New_User.objects.filter(UserId=user.id) for new in News_list: if int(new.NewId) == int(record.id): return HttpResponseRedirect(request.path) # Actualizamos la conf del user, si el usuario no existe, se crea su revista try: user_conf = User_Conf.objects.get(user_name=user.username) except User_Conf.DoesNotExist: create_user_conf(user.username) user_conf = User_Conf.objects.get(user_name=user.username) # Actualizazmos el user_conf del usuario user_conf.last_updated = str(datetime.datetime.now()) user_conf.save() # incluimos la noticia en la tabla de usuario/noticia follow_new = New_User(NewId=record.id, UserId=user.id, date=str(datetime.datetime.now())) follow_new.save() return HttpResponseRedirect(request.path) else: return HttpResponseNotAllowed('403 METHOD NOT ALLOWED')