Event Management System

Prerequisites

Make sure you have the following installed:

  • Python (3.x)
  • Flask
  • SQLite (or any database of your choice)

You can install Flask using pip:

pip install Flask

Directory Structure

event_management_system/
│
├── app.py
├── templates/
│   ├── base.html
│   ├── event_list.html
│   └── event_form.html
└── static/
    └── style.css

Code Implementation

1. app.py

This is the main application file.

from flask import Flask, render_template, redirect, url_for, request
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///events.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)

class Event(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(100), nullable=False)
    description = db.Column(db.String(200), nullable=False)
    date = db.Column(db.String(20), nullable=False)

    def __repr__(self):
        return f'<Event {self.title}>'

@app.route('/')
def index():
    events = Event.query.all()
    return render_template('event_list.html', events=events)

@app.route('/event/new', methods=['GET', 'POST'])
def new_event():
    if request.method == 'POST':
        title = request.form['title']
        description = request.form['description']
        date = request.form['date']
        new_event = Event(title=title, description=description, date=date)
        db.session.add(new_event)
        db.session.commit()
        return redirect(url_for('index'))
    return render_template('event_form.html')

@app.route('/event/edit/<int:event_id>', methods=['GET', 'POST'])
def edit_event(event_id):
    event = Event.query.get_or_404(event_id)
    if request.method == 'POST':
        event.title = request.form['title']
        event.description = request.form['description']
        event.date = request.form['date']
        db.session.commit()
        return redirect(url_for('index'))
    return render_template('event_form.html', event=event)

@app.route('/event/delete/<int:event_id>', methods=['POST'])
def delete_event(event_id):
    event = Event.query.get_or_404(event_id)
    db.session.delete(event)
    db.session.commit()
    return redirect(url_for('index'))

if __name__ == '__main__':
    db.create_all()
    app.run(debug=True)

2. HTML Templates

Base Template (templates/base.html)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Event Management System</title>
    <link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
</head>
<body>
    <div class="container">
        <h1>Event Management System</h1>
        <nav>
            <a href="{{ url_for('index') }}">Home</a>
            <a href="{{ url_for('new_event') }}">Create Event</a>
        </nav>
        {% block content %}{% endblock %}
    </div>
</body>
</html>

Event List Template (templates/event_list.html)

{% extends 'base.html' %}

{% block content %}
    <h2>Event List</h2>
    <ul>
        {% for event in events %}
            <li>
                <strong>{{ event.title }}</strong> - {{ event.date }}
                <form action="{{ url_for('delete_event', event_id=event.id) }}" method="POST" style="display:inline;">
                    <button type="submit">Delete</button>
                </form>
                <a href="{{ url_for('edit_event', event_id=event.id) }}">Edit</a>
            </li>
        {% endfor %}
    </ul>
{% endblock %}

Event Form Template (templates/event_form.html)

htmlCopy code{% extends 'base.html' %}

{% block content %}
    <h2>{% if event %}Edit Event{% else %}New Event{% endif %}</h2>
    <form method="POST">
        <label for="title">Title:</label>
        <input type="text" name="title" required value="{{ event.title if event else '' }}">
        <label for="description">Description:</label>
        <input type="text" name="description" required value="{{ event.description if event else '' }}">
        <label for="date">Date:</label>
        <input type="text" name="date" required value="{{ event.date if event else '' }}">
        <button type="submit">{% if event %}Update{% else %}Create{% endif %}</button>
    </form>
    <a href="{{ url_for('index') }}">Back to Event List</a>
{% endblock %}

3. Basic CSS (optional)

You can add some basic styling in static/style.css.

body {
    font-family: Arial, sans-serif;
    margin: 20px;
}

.container {
    max-width: 800px;
    margin: auto;
}

nav a {
    margin-right: 15px;
}

Running the Application

  1. Navigate to the project directory.
  2. Run the application:
python app.py
  1. Open your web browser and go to http://127.0.0.1:5000.

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *