· last year · Oct 11, 2023, 11:05 PM
1# Import the necessary modules
2import os
3import sys
4
5sys.path.append(os.path.dirname(os.path.abspath(__file__)))
6
7from flask import Flask, render_template, request, redirect, url_for
8from flask_wtf import FlaskForm
9from wtforms import StringField, SubmitField
10from wtforms.validators import DataRequired
11from models import db, Student
12from flask_sqlalchemy import SQLAlchemy
13import mysql.connector
14import secrets
15from config import Config
16from app import db
17
18# Access the SECRET_KEY environment variable
19secret_key = os.environ.get('SECRET_KEY')
20
21if not secret_key:
22 raise ValueError("SECRET_KEY environment variable is not set")
23
24# Configure the Flask app with the secret key
25app = Flask(__name__)
26app.config.from_object(Config)
27app.config['SECRET_KEY'] = secret_key # Use the secret key from the environment variable
28
29# Configure the SQLAlchemy database URI
30app.config['SQLALCHEMY_DATABASE_URI'] = f"mysql://{Config.DB_USER}:{Config.DB_PASSWORD}@{Config.DB_HOST}/{Config.DB_NAME}"
31
32db.init_app(app)
33
34# Define a Flask-WTF form for the Create Student page
35class CreateStudentForm(FlaskForm):
36 Student_Fname = StringField('First Name', validators=[DataRequired()])
37 Student_Mname = StringField('Middle Name')
38 Student_Lname = StringField('Last Name', validators=[DataRequired()])
39 Student_Suffix = StringField('Suffix')
40 Student_GoesBy = StringField('Nickname')
41 Student_Grade = StringField('Grade')
42 Student_Age = StringField('Age')
43 Student_State = StringField('State')
44 Student_Birthday = StringField('Birthday')
45 Student_Campus = StringField('Campus')
46 submit = SubmitField('Submit')
47
48# Function to insert student data into the database
49def insert_student_data(Student_Fname, Student_Mname, Student_Lname, Student_Suffix, Student_Grade, Student_Age, Student_State, Student_GoesBy, Student_Birthday, Student_Campus):
50 try:
51 conn = mysql.connector.connect(**db_config)
52 cursor = conn.cursor()
53
54 # Insert student data into the student_table
55 insert_query = "INSERT INTO tbl_Student (Student_Fname, Student_Mname, Student_Lname, Student_Suffix, Student_Grade, Student_Age, Student_State, Student_GoesBy, Student_Birthday, Student_Campus) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"
56 data = (Student_Fname, Student_Mname, Student_Lname, Student_Suffix, Student_Grade, Student_Age, Student_State, Student_GoesBy, Student_Birthday, Student_Campus)
57 cursor.execute(insert_query, data)
58
59 conn.commit()
60 cursor.close()
61 conn.close()
62 return True
63
64 except Exception as e:
65 print(f"Error inserting data: {str(e)}")
66 return False
67
68# Create routes
69
70@app.route('/')
71def index():
72 return render_template('index.html')
73
74@app.route('/add_student', methods=['GET', 'POST'])
75def create_student():
76 form = CreateStudentForm()
77
78 if form.validate_on_submit():
79 Student_Fname = form.Student_Fname.data
80 Student_Mname = form.Student_Mname.data
81 Student_Lname = form.Student_Lname.data
82 Student_Suffix = form.Student_Suffix.data
83 Student_Grade = form.Student_Grade.data
84 Student_Age = form.Student_Age.data
85 Student_State = form.Student_State.data
86 Student_GoesBy = form.Student_GoesBy.data
87 Student_Birthday = form.Student_Birthday.data
88 Student_Campus = form.Student_Campus.data
89
90 # Insert student data into the database
91 if insert_student_data(Student_Fname, Student_Mname, Student_Lname, Student_Suffix, Student_Grade, Student_Age, Student_State, Student_GoesBy, Student_Birthday, Student_Campus):
92 return redirect(url_for('success'))
93 else:
94 return redirect(url_for('error'))
95
96 return render_template('create_student.html', form=form)
97
98@app.route('/error')
99def error():
100 return render_template('error.html')
101
102@app.route('/success')
103def success():
104 return render_template('success.html')
105
106@app.route('/list_students', methods=['GET'])
107def list_students():
108 page = request.args.get('page', 1, type=int)
109 per_page = request.args.get('per_page', 10, type=int)
110 search_lastname = request.args.get('search_lastname', '')
111 search_grade = request.args.get('search_grade', '')
112 search_age = request.args.get('search_age', '')
113
114 # Query students with pagination and search filters
115 students = Student.query.filter(
116 Student.Student_Lname.ilike(f'%{search_lastname}%'),
117 Student.Student_Grade.ilike(f'%{search_grade}%'),
118 Student.Student_Age == (int(search_age) if search_age.isdigit() else Student.Student_Age)
119 ).paginate(page=page, per_page=per_page)
120
121 return render_template('list_students.html', students=students)
122
123if __name__ == '__main__':
124 app.run(debug=True)
125