from flask import Flask, render_template, request, redirect, url_for from flask_sqlalchemy import SQLAlchemy # Database configuration (replace with your credentials) app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///tickets.db' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False # Disable modification tracking for performance db = SQLAlchemy(app) # Ticket model with essential fields and relationships (optional) class User(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(80), unique=True, nullable=False) email = db.Column(db.String(120), unique=True, nullable=False) password_hash = db.Column(db.String(128), nullable=False) tickets = db.relationship('Ticket', backref='submitter') # One-to-Many relationship with Ticket class Ticket(db.Model): id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(80), nullable=False) description = db.Column(db.Text, nullable=False) category = db.Column(db.String(50), nullable=False) status = db.Column(db.String(20), nullable=False, default='Open') submitter_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False) comments = db.relationship('Comment', backref='ticket') # One-to-Many relationship with Comment class Comment(db.Model): id = db.Column(db.Integer, primary_key=True) content = db.Column(db.Text, nullable=False) author = db.Column(db.String(80), nullable=False) # Consider using User relationship for author identification ticket_id = db.Column(db.Integer, db.ForeignKey('ticket.id'), nullable=False) # User registration and login functionality (basic implementation, consider using libraries like Flask-WTF for form validation and security) @app.route('/register', methods=['GET', 'POST']) def register(): if request.method == 'POST': username = request.form['username'] email = request.form['email'] password = request.form['password'] # Implement secure password hashing and storage # Add user to database (replace with actual registration logic) new_user = User(username=username, email=email, password_hash=password) db.session.add(new_user) db.session.commit() return redirect(url_for('login')) return render_template('register.html') @app.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'POST': username = request.form['username'] password = request.form['password'] # Validate user credentials (replace with actual login logic, consider using Flask-Login for session management) user = User.query.filter_by(username=username).first() if user and check_password(password, user.password_hash): # Implement secure password check return redirect(url_for('home')) else: flash('Invalid username or password', 'error') return render_template('login.html') # Routes for core ticketing functionalities @app.route("/") def home(): return render_template("index.html") @app.route("/submit_ticket", methods=["POST"]) def submit_ticket(): title = request.form["title"] description = request.form["description"] category = request.form["category"] # Create a new ticket object and store it in the database new_ticket = Ticket(title=title, description=description, category=category) db.session.add(new_ticket) db.session.commit() return "Ticket submitted successfully!" @app.route("/tickets") def view_tickets(): tickets = Ticket.query.all() # Retrieve all tickets from database return render_template("tickets.html", tickets=tickets) @app.route("/ticket/<int:ticket_id
Standard input is empty
from flask import Flask, render_template, request, redirect, url_for from flask_sqlalchemy import SQLAlchemy # Database configuration (replace with your credentials) app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///tickets.db' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False # Disable modification tracking for performance db = SQLAlchemy(app) # Ticket model with essential fields and relationships (optional) class User(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(80), unique=True, nullable=False) email = db.Column(db.String(120), unique=True, nullable=False) password_hash = db.Column(db.String(128), nullable=False) tickets = db.relationship('Ticket', backref='submitter') # One-to-Many relationship with Ticket class Ticket(db.Model): id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(80), nullable=False) description = db.Column(db.Text, nullable=False) category = db.Column(db.String(50), nullable=False) status = db.Column(db.String(20), nullable=False, default='Open') submitter_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False) comments = db.relationship('Comment', backref='ticket') # One-to-Many relationship with Comment class Comment(db.Model): id = db.Column(db.Integer, primary_key=True) content = db.Column(db.Text, nullable=False) author = db.Column(db.String(80), nullable=False) # Consider using User relationship for author identification ticket_id = db.Column(db.Integer, db.ForeignKey('ticket.id'), nullable=False) # User registration and login functionality (basic implementation, consider using libraries like Flask-WTF for form validation and security) @app.route('/register', methods=['GET', 'POST']) def register(): if request.method == 'POST': username = request.form['username'] email = request.form['email'] password = request.form['password'] # Implement secure password hashing and storage # Add user to database (replace with actual registration logic) new_user = User(username=username, email=email, password_hash=password) db.session.add(new_user) db.session.commit() return redirect(url_for('login')) return render_template('register.html') @app.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'POST': username = request.form['username'] password = request.form['password'] # Validate user credentials (replace with actual login logic, consider using Flask-Login for session management) user = User.query.filter_by(username=username).first() if user and check_password(password, user.password_hash): # Implement secure password check return redirect(url_for('home')) else: flash('Invalid username or password', 'error') return render_template('login.html') # Routes for core ticketing functionalities @app.route("/") def home(): return render_template("index.html") @app.route("/submit_ticket", methods=["POST"]) def submit_ticket(): title = request.form["title"] description = request.form["description"] category = request.form["category"] # Create a new ticket object and store it in the database new_ticket = Ticket(title=title, description=description, category=category) db.session.add(new_ticket) db.session.commit() return "Ticket submitted successfully!" @app.route("/tickets") def view_tickets(): tickets = Ticket.query.all() # Retrieve all tickets from database return render_template("tickets.html", tickets=tickets) @app.route("/ticket/<int:ticket_id