Advertisement
Guest User

Untitled

a guest
Mar 24th, 2017
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.93 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2. from flask import Flask, redirect, url_for, render_template, request, flash, session
  3. from forms import User_form, New_movie, Search_form, Perfil_form
  4. from models import User, db, Movie
  5. from flask_mail import Mail, Message
  6. import hashlib
  7. import math
  8. import os
  9. import time
  10. from werkzeug.utils import secure_filename
  11.  
  12. UPLOAD_FOLDER = 'static/img/portadas/'
  13. ALLOWED_EXTENSIONS = set(['png', 'jpg', 'jpeg', 'gif'])
  14.  
  15. app = Flask(__name__)
  16.  
  17. app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
  18.  
  19. app.config['SECRET_KEY'] = 'secret'
  20. app.config['MAIL_SERVER'] = 'smtp.gmail.com'
  21. app.config['MAIL_USERNAME'] = 'asd@gmail.com'
  22. app.config['MAIL_PASSWORD'] = ''
  23. app.config['MAIL_PORT'] = 465
  24. app.config['MAIL_USE_SSL'] = True
  25.  
  26. mail = Mail(app)
  27.  
  28. LIMITE_PELICULAS = 5
  29.  
  30. @app.route("/")
  31. def login():
  32. form = User_form()
  33. if request.args.get('email') and request.args.get('password1'):
  34. email = request.args.get('email')
  35. password = hashlib.md5(request.args.get('password1').encode('UTF-8')).hexdigest()
  36. my_user = User.query.filter_by(email=email, password=password).first()
  37. if my_user:
  38. # Existe
  39. session['user'] = my_user.id
  40. return redirect(url_for('dashboard'))
  41. else:
  42. # No Existe
  43. flash('El usuario o contraseña no está registrado.')
  44. return render_template('items/login.html', form=form)
  45.  
  46.  
  47. def allowed_file(filename):
  48. return '.' in filename and
  49. filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
  50.  
  51.  
  52. @app.route("/peliculas/", methods=['GET', 'POST'], defaults={'pag': 1})
  53. @app.route("/peliculas/<int:pag>", methods=['GET', 'POST'])
  54. def dashboard(pag):
  55. form = New_movie()
  56. form_search = Search_form()
  57. if request.method == 'POST':
  58. if form.validate_on_submit():
  59. # Movemos la imagen a staticgg
  60. file = request.files['image']
  61. if file and allowed_file(file.filename):
  62. filename = secure_filename(file.filename)
  63. hora_unix = int(time.time())
  64. ruta = str(hora_unix) + filename
  65. file.save(os.path.join(app.config['UPLOAD_FOLDER'], ruta))
  66. else:
  67. flash('Debe ser una imagen.')
  68. # Guardamos la info en la base de datos
  69. my_movie = Movie(request.form['name'], request.form['year'], request.form['score'], ruta, session['user'])
  70. db.session.add(my_movie)
  71. try:
  72. db.session.commit()
  73. flash('Añadido correctamente', 'success')
  74. except:
  75. db.session.rollback()
  76. else:
  77. #mostramos errores
  78. errores = form.errors.items()
  79. for campo, mensajes in errores:
  80. for mensaje in mensajes:
  81. flash(mensaje, 'danger')
  82. movies = Movie.query.limit(LIMITE_PELICULAS * pag).offset(LIMITE_PELICULAS * (pag - 1)).all()
  83. num_movies = Movie.query.count()
  84. num_paginas = math.ceil(num_movies / LIMITE_PELICULAS)
  85. # Obtenemos el usuario
  86. my_user = User.query.filter_by(id=session['user']).first()
  87. return render_template('items/dashboard.html', form=form, movies=movies, num_paginas=num_paginas, LIMITE_PELICULAS=LIMITE_PELICULAS, form_search=form_search, user=my_user)
  88.  
  89. @app.route("/search/<ordenar>")
  90. def search(ordenar):
  91. movies = False
  92. form = New_movie()
  93. form_search = Search_form()
  94.  
  95. if ordenar == 'year':
  96. movies = Movie.query.order_by(Movie.year)
  97. elif ordenar == 'name':
  98. movies = Movie.query.order_by(Movie.name)
  99.  
  100. return render_template('items/dashboard.html', movies=movies, form=form, form_search=form_search, num_paginas=0)
  101.  
  102.  
  103. @app.route("/filter")
  104. def filter():
  105. form = New_movie()
  106. form_search = Search_form()
  107. name = request.args.get('name')
  108. year = request.args.get('year')
  109. movies = Movie.query.filter(Movie.name.like(f'%{name}%')).filter(Movie.year.like(f'%{year}%')).all()
  110.  
  111. return render_template('items/dashboard.html', movies=movies, form=form, form_search=form_search, num_paginas=0)
  112.  
  113.  
  114.  
  115. @app.route("/confirmar/<token>")
  116. def confirmar(token):
  117. my_user = User.query.filter_by(token=token).first()
  118. if my_user:
  119. my_user.active = True
  120. db.session.add(my_user)
  121. try:
  122. flash('Su cuenta ha sido activada.', 'success')
  123. db.session.commit()
  124. except:
  125. db.session.rollback()
  126. else:
  127. flash('Enlace caducado', 'danger')
  128. return redirect(url_for('login'))
  129.  
  130.  
  131.  
  132. @app.route("/signup", methods=['GET', 'POST'])
  133. def signup():
  134. form = User_form()
  135. if request.method == 'POST':
  136. if form.validate_on_submit():
  137. email = request.form['email']
  138. my_user = User.query.filter_by(email=email).first()
  139. if not my_user:
  140. if request.form['password1'] == request.form['password2']:
  141. my_user = User(request.form['username'], request.form['email'], request.form['password1'])
  142. db.session.add(my_user)
  143. try:
  144. db.session.commit
  145. db.session.commit()
  146. # Envio de email
  147. msg = Message("Hello",
  148. sender="no-reply@idecrea.es",
  149. recipients=[my_user.email])
  150. link_token = f'http://localhost:5000/confirmar/{my_user.token}'
  151. msg.html = render_template(
  152. 'email/confirmar.html',
  153. link_token=link_token)
  154. mail.send(msg)
  155. # Informamos al usuario
  156. flash('Le acabamos de enviar un email con las instrucciones. Gracias.', 'success')
  157.  
  158. except:
  159. db.session.rollback()
  160. flash('Disculpe, ha ocurrido un error.', 'danger')
  161. return redirect(url_for('login'))
  162. else:
  163. flash('Los passwords no son iguales', 'danger')
  164. else:
  165. flash('El e-mail ya esta registrado', 'danger')
  166. else:
  167. # Mostramos errores
  168. errores = form.errors.items()
  169. for campo, mensajes in errores:
  170. for mensaje in mensajes:
  171. flash(mensaje, 'danger')
  172. return render_template('items/signup.html', form=form)
  173.  
  174. @app.route("/close")
  175. def close_session():
  176. session.clear()
  177. return redirect(url_for('dashboard'))
  178.  
  179.  
  180. @app.route("/like/<movie>")
  181. def add_like(movie):
  182. movie_like = Movie.query.filter_by(id=movie).first()
  183. movie_like.like = movie_like.like + 1
  184. db.session.add(movie_like)
  185. db.session.commit()
  186. return ''
  187.  
  188.  
  189. @app.route("/perfil", methods=['GET', 'POST'])
  190. def perfil():
  191. form = Perfil_form()
  192. my_user = User.query.filter_by(id=session['user']).first()
  193. if request.method == 'POST':
  194. # Comprobamos si desean cambiar la contraseña
  195. if request.form['password_anterior'] and request.form['password_nueva']:
  196. # Comprobamos que la contraseña anterior es igual a la que ya estaba
  197. if hashlib.md5(request.form['password_anterior'].encode('utf-8')).hexdigest() == my_user.password:
  198. # Modificamos
  199. my_user.password = hashlib.md5(request.form['password_nueva'].encode('utf-8')).hexdigest()
  200. db.session.add(my_user)
  201. try:
  202. db.session.commit()
  203. flash('Su contraseña ha sido modificada correctamente', 'success')
  204. except:
  205. db.session.rollback()
  206. else:
  207. flash('Su contraseña anterior no es igual. ¿Eres tú?', 'danger')
  208. # Cambiar el username
  209. my_user.username = request.form['username']
  210. db.session.add(my_user)
  211. try:
  212. db.session.commit()
  213. except:
  214. db.session.rollback()
  215. return render_template('items/perfil.html', form=form, user=my_user)
  216.  
  217. if __name__ == "__main__":
  218. app.debug = True
  219. app.run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement