fork download
  1. from flask import Flask, render_template, request, redirect, url_for
  2. from flask_sqlalchemy import SQLAlchemy
  3.  
  4. # Database configuration (replace with your credentials)
  5. app = Flask(__name__)
  6. app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///tickets.db'
  7. app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False # Disable modification tracking for performance
  8.  
  9. db = SQLAlchemy(app)
  10.  
  11. # Ticket model with essential fields and relationships (optional)
  12. class User(db.Model):
  13. id = db.Column(db.Integer, primary_key=True)
  14. username = db.Column(db.String(80), unique=True, nullable=False)
  15. email = db.Column(db.String(120), unique=True, nullable=False)
  16. password_hash = db.Column(db.String(128), nullable=False)
  17. tickets = db.relationship('Ticket', backref='submitter') # One-to-Many relationship with Ticket
  18.  
  19. class Ticket(db.Model):
  20. id = db.Column(db.Integer, primary_key=True)
  21. title = db.Column(db.String(80), nullable=False)
  22. description = db.Column(db.Text, nullable=False)
  23. category = db.Column(db.String(50), nullable=False)
  24. status = db.Column(db.String(20), nullable=False, default='Open')
  25. submitter_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
  26. comments = db.relationship('Comment', backref='ticket') # One-to-Many relationship with Comment
  27.  
  28. class Comment(db.Model):
  29. id = db.Column(db.Integer, primary_key=True)
  30. content = db.Column(db.Text, nullable=False)
  31. author = db.Column(db.String(80), nullable=False) # Consider using User relationship for author identification
  32. ticket_id = db.Column(db.Integer, db.ForeignKey('ticket.id'), nullable=False)
  33.  
  34. # User registration and login functionality (basic implementation, consider using libraries like Flask-WTF for form validation and security)
  35. @app.route('/register', methods=['GET', 'POST'])
  36. def register():
  37. if request.method == 'POST':
  38. username = request.form['username']
  39. email = request.form['email']
  40. password = request.form['password'] # Implement secure password hashing and storage
  41.  
  42. # Add user to database (replace with actual registration logic)
  43. new_user = User(username=username, email=email, password_hash=password)
  44. db.session.add(new_user)
  45. db.session.commit()
  46.  
  47. return redirect(url_for('login'))
  48. return render_template('register.html')
  49.  
  50. @app.route('/login', methods=['GET', 'POST'])
  51. def login():
  52. if request.method == 'POST':
  53. username = request.form['username']
  54. password = request.form['password']
  55.  
  56. # Validate user credentials (replace with actual login logic, consider using Flask-Login for session management)
  57. user = User.query.filter_by(username=username).first()
  58. if user and check_password(password, user.password_hash): # Implement secure password check
  59. return redirect(url_for('home'))
  60. else:
  61. flash('Invalid username or password', 'error')
  62. return render_template('login.html')
  63.  
  64. # Routes for core ticketing functionalities
  65. @app.route("/")
  66. def home():
  67. return render_template("index.html")
  68.  
  69. @app.route("/submit_ticket", methods=["POST"])
  70. def submit_ticket():
  71. title = request.form["title"]
  72. description = request.form["description"]
  73. category = request.form["category"]
  74.  
  75. # Create a new ticket object and store it in the database
  76. new_ticket = Ticket(title=title, description=description, category=category)
  77. db.session.add(new_ticket)
  78. db.session.commit()
  79.  
  80. return "Ticket submitted successfully!"
  81.  
  82. @app.route("/tickets")
  83. def view_tickets():
  84. tickets = Ticket.query.all() # Retrieve all tickets from database
  85. return render_template("tickets.html", tickets=tickets)
  86.  
  87. @app.route("/ticket/<int:ticket_id
  88.  
Success #stdin #stdout 0.03s 25488KB
stdin
Standard input is empty
stdout
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