Advertisement
Guest User

Untitled

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