Advertisement
DamianBusz

Untitled

Mar 11th, 2017
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 14.94 KB | None | 0 0
  1. from flask import Flask, flash, render_template, request, session, Markup, url_for, redirect
  2. from flask.ext.login import LoginManager, login_user
  3. import os
  4. from flask_sqlalchemy import SQLAlchemy
  5. import datetime
  6. from werkzeug.utils import secure_filename
  7.  
  8.  
  9. UPLOAD_FOLDER = 'static/zdjecia/'
  10. ALLOWED_EXTENSIONS = set(['png', 'jpg', 'jpeg', 'gif'])
  11.  
  12.  
  13. app = Flask(__name__)
  14. app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:damian123@localhost/sklep'
  15. app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
  16. db = SQLAlchemy(app)
  17. login_manager = LoginManager()
  18. @login_manager.user_loader
  19. def load_user(user_id):
  20.     return User.get(user_id)
  21.  
  22.  
  23. def allowed_file(filename):
  24.     return '.' in filename and \
  25.             filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
  26.  
  27.  
  28. class Product(db.Model):
  29.     __tablename__ = "product"
  30.     id = db.Column(db.Integer, primary_key=True, autoincrement=True)
  31.     name = db.Column(db.String)
  32.     description = db.Column(db.String)
  33.     price = db.Column(db.Integer)
  34.     total_quantity = db.Column(db.Integer)
  35.     image = db.Column(db.String)
  36.  
  37.     def __init__(self, name, description, price, total_quantity, image):
  38.         self.name = name
  39.         self.description = description
  40.         self.price = price
  41.         self.total_quantity = total_quantity
  42.         self.image = image
  43.  
  44.     @property
  45.     def image_url(self):
  46.         if self.image:
  47.             return 'static/zdjecia/%s' % self.image
  48.  
  49.         return 'static/img/portfolio/%d.jpg' % self.id
  50.  
  51.  
  52.  
  53. class ProductUser(db.Model):
  54.     __tablename__ = "userproducts"
  55.     id = db.Column(db.Integer, primary_key=True, autoincrement=True)
  56.     quantity = db.Column(db.Integer)
  57.  
  58.     product_id = db.Column(db.Integer, db.ForeignKey('product.id'))## Powiazanie do tabeli product
  59.     product = db.relationship('Product',
  60.                                backref=db.backref('users', lazy='dynamic'))
  61.  
  62.     user_id = db.Column(db.Integer, db.ForeignKey('users.id')) ##Powiazanie do tabeli users
  63.     user = db.relationship('User',
  64.                             backref=db.backref('products', lazy='dynamic'))
  65. class User(db.Model):
  66.  
  67.     __tablename__ = "users"
  68.     id = db.Column(db.Integer, primary_key=True, autoincrement=True)
  69.     username = db.Column(db.String)
  70.     password = db.Column(db.String)
  71.     is_admin = db.Column(db.Integer)
  72.     email = db.Column(db.String)
  73.     name = db.Column(db.String)
  74.     surname = db.Column(db.String)
  75.     address = db.Column(db.String)
  76.  
  77.     def __init__(self, username, password,is_admin,email, name, surname, address):
  78.         self.username = username
  79.         self.password = password
  80.         self.is_admin = is_admin
  81.         self.email = email
  82.         self.name = name
  83.         self.surname = surname
  84.         self.address = address
  85.  
  86.     def __repr__(self):
  87.         return '<User %r>' % self.username
  88.  
  89.     @property
  90.     def is_authenticated(self):
  91.         return True
  92.  
  93.     def is_active(self):
  94.         return True
  95.  
  96.     def is_anonymous(self):
  97.         return True
  98.  
  99. class ProductOrder(db.Model):
  100.     __tablename__ = "orderproducts"
  101.     quantity = db.Column(db.Integer)
  102.     price = db.Column(db.Integer)
  103.  
  104.     product_id = db.Column(db.Integer, db.ForeignKey('product.id'),
  105.             primary_key=True)## Powiazanie do tabeli product
  106.     product = db.relationship('Product',
  107.                                backref=db.backref('orders', lazy='dynamic'))
  108.  
  109.     order_id = db.Column(db.Integer, db.ForeignKey('orders.id'),
  110.             primary_key=True)## Powiazanie do tabeli order
  111.     order = db.relationship('Order',
  112.                                backref=db.backref('products', lazy='dynamic'))
  113.  
  114. class Order(db.Model):
  115.     __tablename__ = "orders"
  116.     id = db.Column(db.Integer, primary_key=True, autoincrement=True)
  117.     total = db.Column(db.Integer)
  118.     created_date = db.Column(db.DateTime, default=datetime.datetime.utcnow)
  119.  
  120.     user_id = db.Column(db.Integer, db.ForeignKey('users.id')) ##Powiazanie do tabeli users
  121.     user = db.relationship('User',
  122.                             backref=db.backref('orders', lazy='dynamic'))
  123.  
  124.  
  125. @app.route('/', methods = ['GET','POST'])
  126. def home():
  127.     if not session.get('zalogowany'):
  128.         producttoShow = Product.query.all()
  129.         return render_template('index.html', product_show = producttoShow, )
  130.     else:
  131.         #pokazuje produkt w indexie
  132.         producttoShow = Product.query.all()
  133.  
  134.         if request.method == 'POST':
  135.             quantity = int(request.form['quantity'])
  136.             product_id = request.form['product_id']
  137.             product = Product.query.filter_by(id=product_id).first()
  138.             if product.total_quantity < quantity:
  139.                 flash(Markup('<center><p>Brak podanej ilosci</center></p>'))
  140.             else:
  141.                 dodano = ProductUser()
  142.                 dodano.user_id = session['user_id']
  143.                 dodano.product = product
  144.                 dodano.quantity = quantity
  145.  
  146.                 product.total_quantity -= quantity
  147.                 db.session.add(product)
  148.                 db.session.add(dodano)
  149.                 db.session.commit()
  150.                 flash(Markup('<center><p>Dodano do koszyka</center></p>'))
  151.         return render_template('index.html', product_show = producttoShow)
  152.  
  153. @app.route('/profil', methods = ['GET','POST'])
  154. def profil():
  155.     if session.get('zalogowany'):
  156.         cos = ProductUser.query.filter_by(user_id=session['user_id']).all() # Wyswietlanie koszyka
  157.         username = session['user_name']
  158.         usertoShow = User.query.filter_by(username=username).first()
  159.         #Dodawanie sumy
  160.         total = 0
  161.         for i in cos:
  162.             total += i.quantity * i.product.price
  163.         #Usuwanie z koszyka
  164.         if request.method == 'POST':
  165.             pid = request.form['id']
  166.             usunieto = ProductUser.query.filter_by(id=pid).first()
  167.             db.session.delete(usunieto)
  168.             db.session.commit()
  169.             return redirect(url_for('profil'))
  170.  
  171.         return render_template('profil.html', user_show = usertoShow,
  172.                                              koszyk_show = cos,
  173.                                             suma_show = total)
  174.     else:
  175.         return render_template('login.html')
  176.  
  177. #Rejestracja
  178. @app.route('/register', methods =['GET','POST'])
  179. def register():
  180.     if request.method == 'GET':
  181.         return render_template('register.html')
  182.     elif request.method == 'POST':
  183.         username = str(request.form['username'])
  184.         password = str(request.form['password'])
  185.         email = str(request.form['email'])
  186.         is_admin = '0'
  187.         name = 'Brak'
  188.         surname = 'Brak'
  189.         address = 'Brak'
  190.         user = User(username=username, password=password, is_admin=is_admin,
  191.                 email=email,name=name, surname=surname,address=address)
  192.         if (len(username) >=2 and len(username) <15) and (len(password) >=4 and len(password) <15):
  193.             db.session.add(user)
  194.             db.session.commit()
  195.             flash(Markup('Zarejestrowales uzytkownika o nazwie <b>{0}</b>. Prosze sie zalogowac'.format(username)))
  196.             return render_template('login.html')
  197.         else:
  198.             flash('Login lub haslo musi zawierac wiecej niz 2 i mniej niz 15 znakow')
  199.             return render_template('register.html')
  200.  
  201.  
  202.  
  203. ##Logowanie
  204. @app.route('/login', methods=['GET','POST'])
  205. def login():
  206.     if request.method == 'POST':
  207.         username = str(request.form['username'])
  208.         password = str(request.form['password'])
  209.         result = User.query.filter_by(username=username,password=password).first()
  210.         if result:
  211.             login_user(User)
  212.             return redirect(url_for('profil'))
  213.         else:
  214.             flash(Markup(
  215.                 '<p><font color="red">Zly login lub haslo.<br>Chcialbys sie </font><a href="/register">zarejestrowac?</a></p>'))
  216.             return render_template('login.html')
  217.  
  218.     elif not request.method == 'POST':
  219.         flash(Markup(''))
  220.     return render_template('login.html')
  221.  
  222. @app.route('/profil/managepw', methods = ['GET','POST'])
  223. def zmiana_hasla():
  224.     if session.get('zalogowany'):
  225.         username = session['user_name']
  226.         usertoShow = User.query.filter_by(username=username).first()
  227.         if request.method == 'POST':
  228.             pw = str(request.form['password'])
  229.             rw = str(request.form['newpassword'])
  230.             if usertoShow.password == rw:
  231.                 flash(Markup('<b>Twoje nowe haslo musi roznic sie od starego</b>'))
  232.                 return redirect(url_for('zmiana_hasla'))
  233.             elif usertoShow.password == pw:
  234.                  usertoShow.password = rw
  235.                  db.session.commit()
  236.                  flash(Markup('<b>Zmieniono haslo</b>'))
  237.                  return redirect(url_for('zmiana_hasla'))
  238.             else:
  239.                 flash(Markup('<b>Podaj swoje stare haslo i nowe haslo</b>'))
  240.                 return redirect(url_for('zmiana_hasla'))
  241.  
  242.         return render_template('pw.html', user_show = usertoShow,
  243.                                             )
  244.     else:
  245.         return render_template('login.html')
  246.  
  247. @app.route('/profil/managemail', methods = ['GET','POST'])
  248. def zmiana_emaila():
  249.     if session.get('zalogowany'):
  250.         username = session['user_name']
  251.         usertoShow = User.query.filter_by(username=username).first()
  252.         if request.method == 'POST':
  253.             pw = str(request.form['password'])
  254.             rw = str(request.form['newemail'])
  255.             if usertoShow.email == rw:
  256.                 flash(Markup('<b>Nowy adres email musi sie roznic od starego adresu</b>'))
  257.                 return redirect(url_for('zmiana_emaila'))
  258.             elif usertoShow.password == pw:
  259.                  usertoShow.email = rw
  260.                  db.session.commit()
  261.                  flash(Markup('<b>Zmieniono adres email</b>'))
  262.                  return redirect(url_for('zmiana_emaila'))
  263.             else:
  264.                 flash(Markup('<b>Podaj swoje stare haslo i nowy adres email</b>'))
  265.                 return redirect(url_for('zmiana_emaila'))
  266.  
  267.         return render_template('pe.html', user_show = usertoShow,
  268.                                             )
  269.     else:
  270.         return render_template('login.html')
  271.  
  272.  
  273. @app.route('/profil/zamowienia')
  274. def zamowienia():
  275.     if session.get('zalogowany'):
  276.         cos = Order.query.filter_by(user_id=session['user_id']).all()
  277.         username = session['user_name']
  278.         usertoShow = User.query.filter_by(username=username).first()
  279.  
  280.         return render_template('zamowienia.html', user_show=usertoShow,
  281.                                zamowienia_show=cos)
  282.     else:
  283.         return render_template('login.html')
  284.  
  285. @app.route('/profil/zamowienie')
  286. def zamowienie():
  287.     if session.get('zalogowany'):
  288.         cos = ProductUser.query.filter_by(user_id=session['user_id']).all()  # Wyswietlanie koszyka
  289.         username = session['user_name']
  290.         usertoShow = User.query.filter_by(username=username).first()
  291.         # Dodawanie sumy
  292.         total = 0
  293.         for i in cos:
  294.             total += i.quantity * i.product.price
  295.  
  296.         return render_template('zamowienie.html', user_show=usertoShow,
  297.                                koszyk_show=cos,
  298.                                suma_show=total)
  299.     else:
  300.         return render_template('login.html')
  301.  
  302.  
  303. @app.route('/profil/zamowienie/buy')
  304. def zamowienie_zloz():
  305.     if session.get('zalogowany'):
  306.         username = session['user_name']
  307.         usertoShow = User.query.filter_by(username=username).first()
  308.         produkty_w_koszyku = ProductUser.query.filter_by(user_id=session['user_id']).all()
  309.  
  310.         o = Order(user=usertoShow,total=0)
  311.  
  312.         # Dodawanie sumy
  313.         ptr = {}
  314.         total = 0
  315.         for ppp in produkty_w_koszyku:
  316.             pp = ppp.quantity * ppp.product.price
  317.             total += pp
  318.             if ppp.product_id in ptr:
  319.                 ptr[ppp.product_id][1] += ppp.quantity
  320.             else:
  321.                 ptr[ppp.product_id] = [ppp, ppp.quantity]
  322.  
  323.             db.session.delete(ppp)
  324.  
  325.         for key, rw in ptr.items():
  326.             ppp, quantity = rw
  327.             pp = quantity * ppp.product.price
  328.             op = ProductOrder(order=o, product=ppp.product, quantity=quantity, price=pp)
  329.             db.session.add(op)
  330.  
  331.         o.total = total
  332.         db.session.add(o)
  333.         db.session.commit()
  334.         flash(Markup('<b>Zlozono zamowienie.</b>'))
  335.         return redirect(url_for('zamowienia'))
  336.  
  337.     else:
  338.         return render_template('login.html')
  339.  
  340.  
  341. @app.route('/profil/personal', methods = ['GET','POST'])
  342. def zmiana_danych():
  343.     if session.get('zalogowany'):
  344.         username = session['user_name']
  345.         usertoShow = User.query.filter_by(username=username).first()
  346.         if request.method == 'POST':
  347.             i_n = str(request.form['imie'])
  348.             n_n = str(request.form['nazwisko'])
  349.             adres = str(request.form['adres'])
  350.             if len(i_n) < 1 or len(n_n) < 1 or len(adres) < 1:
  351.                 flash(Markup('<b>Musisz wypelnic pola</b>'))
  352.                 return redirect(url_for('zmiana_danych'))
  353.             else:
  354.                 usertoShow.name = i_n
  355.                 usertoShow.surname = n_n
  356.                 usertoShow.address = adres
  357.                 db.session.commit()
  358.                 flash(Markup('<b>Przypisano twoje dane personalne</b>'))
  359.                 return redirect(url_for('zmiana_danych'))
  360.  
  361.         return render_template('personal.html', user_show = usertoShow,
  362.                                             )
  363.     else:
  364.         return render_template('login.html')
  365.  
  366. @app.route("/profil/admin", methods=['GET','POST'])
  367. def isadmin():
  368.     username = session['user_name']
  369.     usertoShow = User.query.filter_by(username=username).first()
  370.     if usertoShow.is_admin:
  371.         if request.method == 'GET':
  372.             return render_template('admin.html')
  373.         elif request.method == 'POST':
  374.             file = request.files['file']
  375.             if not file or not allowed_file(file.filename):
  376.                 return render_template('404.html')
  377.  
  378.             filename = secure_filename(file.filename)
  379.             file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
  380.  
  381.             name = str(request.form['name'])
  382.             desc = str(request.form['description'])
  383.             price = str(request.form['price'])
  384.             total_q = str(request.form['total_q'])
  385.             produktadd = Product(name=name, description=desc, price=price,
  386.                     total_quantity=total_q,image=filename)
  387.             db.session.add(produktadd)
  388.             db.session.commit()
  389.         return render_template('admin.html', user_show = usertoShow)
  390.     else:
  391.         return render_template('404.html')
  392. ###Logout
  393. @app.route("/logout")
  394. def logout():
  395.     session['zalogowany'] = False
  396.     return home()
  397.  
  398.  
  399. ##404
  400. @app.errorhandler(404)
  401. def nie_znaleziono(e):
  402.     return render_template("404.html")
  403.  
  404. if __name__ == "__main__":
  405.     app.secret_key = os.urandom(12)
  406.     app.run(host='0.0.0.0', port=4567)
  407. login_manager.init_app(app)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement