Guest User

pypila

a guest
Jan 12th, 2016
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.35 KB | None | 0 0
  1. from __future__ import unicode_literals
  2.  
  3. from flask import (
  4.     Flask, render_template, url_for, redirect, request, session, flash
  5. )
  6. from flask.ext.script import Manager, Server
  7. from flask.ext.bootstrap import Bootstrap
  8.  
  9. import forms
  10.  
  11. app = Flask(__name__)
  12. server = Server(host='0.0.0.0', port='5000')
  13. app.secret_key = 'Some mega ultra hiper secret key'
  14. manager = Manager(app)
  15. manager.add_command('runserver', server)
  16. bootstrap = Bootstrap(app)
  17.  
  18. IMAGE_EXTENSIONS = ['.jpg', '.jpeg', '.gif', '.png']
  19.  
  20.  
  21. @app.route('/')
  22. def index():
  23.     """
  24.        if user is logged:
  25.            render template index.html with user name in "name" parameter
  26.        else:
  27.            just render template index.html
  28.    """
  29.     form = forms.LoginForm()
  30.     if 'username' in session:
  31.         return render_template("index.html",name=session['username'])
  32.     else:
  33.         return render_template("index.html")
  34.  
  35. @app.route('/browse')
  36. def browse():
  37.     """
  38.        render template with get_images function in "images" parameter
  39.    """
  40.     return render_template("browse.html",images=get_images())
  41.  
  42. @app.route('/register', methods=['GET', 'POST'])
  43. def register():
  44.     """
  45.        function to register users.
  46.        Checks if user already exists in users.txt using user_exists function.
  47.        if user exists:
  48.            flash message: "Sorry but user with given username already exists"
  49.            and redirect to register.html
  50.        Rendered based on RegistrationForm.
  51.    """
  52.     form = forms.RegistrationForm(request.form)
  53.     if request.method == 'POST':
  54.         if user_exists(form.username.data):
  55.             flash('Sorry but user with given username already exists')
  56.             return redirect(url_for('register'))
  57.         else:
  58.             with open('users.txt', 'a+') as f:
  59.                 f.write('\n'+form.username.data+':'+form.password.data)
  60.             flash('User added')
  61.             return redirect(url_for('login'))
  62.     return render_template('register.html', form=form)
  63.  
  64. @app.route('/login', methods=['GET', 'POST'])
  65. def login():
  66.     """
  67.        if user provide corrected login and password combination:
  68.            flash message: "You have been logged successfully"
  69.            and redirect to index.html
  70.        else:
  71.            render login.html template with LoginForm as "form" parameter
  72.    """
  73.     form = forms.LoginForm()
  74.     if request.method == 'POST':
  75.        
  76.         if user_exists(request.form['username']) and validate_password(request.form['username'],request.form['password']):
  77.             session['username'] = request.form['username']
  78.             flash('You have been logged successfully')
  79.             return redirect(url_for('index'))
  80.         else:
  81.             flash('User not exists or wrong password')
  82.             return render_template("login.html",form=form)
  83.     else:
  84.         return render_template("login.html",form=form)
  85.    
  86.  
  87.  
  88. @app.route('/logout')
  89. def logout():
  90.     """
  91.        Pop user from session, send flash message:
  92.        "You have been logged out succesfully"
  93.        and redirect to index page
  94.    """
  95.  
  96.     session['username'] = ""
  97.     flash('You have been logged successfully')
  98.     return redirect(url_for('index'))
  99.  
  100. def validate_password(username, password):
  101.     """
  102.        Helper function for login().
  103.        Checks if username and password combination match to data in users.txt
  104.        @param username: user name
  105.        @param password: user password
  106.        @return: True or False
  107.    """
  108.     u = {}
  109.     with open('users.txt', 'r') as f:
  110.         for line in f:
  111.             (key,val)=line.split(":")
  112.             u.setdefault(key, val)
  113.     if u[username]==password:
  114.         return True
  115.     else:
  116.         return False
  117.  
  118. def user_exists(username):
  119.     """
  120.        Helper function for register().
  121.        Checks if user exists in users.txt
  122.        @param username: user name
  123.        @return: True or False
  124.    """
  125.     with open('users.txt', 'r') as f:
  126.         users = f.read()
  127.  
  128.     if username in users:
  129.         return True
  130.     else:
  131.         return False
  132.  
  133. def get_images():
  134.     """
  135.        Helper function for browse()
  136.        Creates reversed list with urls to images taken from images.txt file
  137.    """
  138.     ob=[]
  139.     with open('images.txt', 'r') as f:
  140.         for line in f:
  141.             ob.append(line)
  142.     return sorted(ob,reverse=True)
  143.  
  144. @app.errorhandler(404)
  145. def page_not_found(e):
  146.     """
  147.        render template 404.html and send 404 http status
  148.    """
  149.     return render_template("404.html"),404
  150.  
  151. @app.errorhandler(500)
  152. def internal_server_error(e):
  153.     """
  154.        render template 500.html and send 500 http status
  155.    """
  156.     return render_template("500.html"),500
  157.  
  158. @app.route('/add', methods=['GET', 'POST'])
  159. def add():
  160.     """
  161.        Render add.html with forms.AdditionForm(request.form)as "form" param
  162.        if form is correct open images.txt file and add url to next line, then
  163.        flash message: 'Photo added succesfully' and redirect to browse.html
  164.    """
  165.     form = forms.AdditionForm()
  166.    
  167.     if request.form:
  168.         with open('images.txt', 'a+') as f:
  169.             f.write('\n'+request.form['url'])
  170.             flash('Photo added succesfully')
  171.             return redirect(url_for('browse'))
  172.     else:
  173.         return render_template("add.html",form=forms.AdditionForm(request.form))
  174.  
  175.  
  176. if __name__ == '__main__':
  177.     manager.run()
Advertisement
Add Comment
Please, Sign In to add comment