├── README.md ├── app.py ├── requirements.txt ├── static └── css │ └── styles.css └── templates └── index.html /README.md: -------------------------------------------------------------------------------- 1 | # URL-Shortener 2 | Simple and fast URL shortener! 3 | -------------------------------------------------------------------------------- /app.py: -------------------------------------------------------------------------------- 1 | from flask import Flask, request, redirect, render_template 2 | from flask_sqlalchemy import SQLAlchemy 3 | from sqlalchemy.exc import IntegrityError 4 | import string 5 | import random 6 | 7 | app = Flask(__name__) 8 | app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///urls.db' 9 | db = SQLAlchemy(app) 10 | 11 | class URL(db.Model): 12 | id = db.Column(db.Integer, primary_key=True) 13 | original_url = db.Column(db.String(512), nullable=False) 14 | short_url = db.Column(db.String(10), unique=True, nullable=False) 15 | 16 | def generate_short_url(): 17 | characters = string.ascii_letters + string.digits 18 | short_url = ''.join(random.choice(characters) for _ in range(6)) 19 | return short_url 20 | 21 | @app.route('/', methods=['GET', 'POST']) 22 | def index(): 23 | if request.method == 'POST': 24 | original_url = request.form['original_url'] 25 | short_url = generate_short_url() 26 | new_url = URL(original_url=original_url, short_url=short_url) 27 | try: 28 | db.session.add(new_url) 29 | db.session.commit() 30 | except IntegrityError: 31 | db.session.rollback() 32 | short_url = generate_short_url() 33 | new_url = URL(original_url=original_url, short_url=short_url) 34 | db.session.add(new_url) 35 | db.session.commit() 36 | return render_template('index.html', short_url=short_url) 37 | return render_template('index.html') 38 | 39 | @app.route('/') 40 | def redirect_to_url(short_url): 41 | url = URL.query.filter_by(short_url=short_url).first_or_404() 42 | return redirect(url.original_url) 43 | 44 | if __name__ == '__main__': 45 | db.create_all() 46 | app.run(debug=True) 47 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | Flask==2.0.1 2 | Flask-SQLAlchemy==2.5.1 3 | -------------------------------------------------------------------------------- /static/css/styles.css: -------------------------------------------------------------------------------- 1 | body { 2 | font-family: Arial, sans-serif; 3 | background: #f5f5f5; 4 | display: flex; 5 | justify-content: center; 6 | align-items: center; 7 | height: 100vh; 8 | margin: 0; 9 | } 10 | 11 | .container { 12 | background: white; 13 | padding: 20px; 14 | border-radius: 5px; 15 | box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); 16 | text-align: center; 17 | } 18 | 19 | input[type="url"] { 20 | padding: 10px; 21 | width: 80%; 22 | margin-bottom: 10px; 23 | border: 1px solid #ddd; 24 | border-radius: 3px; 25 | } 26 | 27 | button { 28 | padding: 10px 15px; 29 | border: none; 30 | background: #007bff; 31 | color: white; 32 | border-radius: 3px; 33 | cursor: pointer; 34 | } 35 | 36 | button:hover { 37 | background: #0056b3; 38 | } 39 | -------------------------------------------------------------------------------- /templates/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | URL Shortener 7 | 8 | 9 | 10 |
11 |

URL Shortener

12 |
13 | 14 | 15 |
16 | {% if short_url %} 17 |

Your shortened URL is: {{ request.host_url }}{{ short_url }}

18 | {% endif %} 19 |
20 | 21 | 22 | --------------------------------------------------------------------------------