|
1 |
| -import sqlite3 |
2 |
| -import datetime |
3 |
| -from flask import g, Flask, flash, render_template, request, redirect, url_for |
4 |
| - |
5 |
| -app = Flask(__name__) |
6 |
| - |
7 |
| -DATABASE = 'db/jobs.sqlite' |
8 |
| - |
9 |
| -def get_db(): |
10 |
| - db = getattr(g, '_database', None) |
11 |
| - if db is None: |
12 |
| - db = g._database = sqlite3.connect(DATABASE) |
13 |
| - db.row_factory = sqlite3.Row |
14 |
| - return db |
15 |
| - |
16 |
| -def query_db(query, args=(), one=False): |
17 |
| - cur = get_db().execute(query, args) |
18 |
| - rv = cur.fetchall() |
19 |
| - cur.close() |
20 |
| - return (rv[0] if rv else None) if one else rv |
21 |
| - |
22 |
| -@app.teardown_appcontext |
23 |
| -def close_connection(exception): |
24 |
| - db = getattr(g, '_database', None) |
25 |
| - if db is not None: |
26 |
| - db.close() |
27 |
| - |
28 |
| -@app.route('/') |
29 |
| -@app.route('/jobs') |
30 |
| -def jobs(): |
31 |
| - jobs = query_db( |
32 |
| - 'SELECT job.id, job.title, job.description, job.salary, employer.id as employer_id, employer.name as employer_name' |
33 |
| - ' FROM job JOIN employer ON employer.id = job.employer_id') |
34 |
| - return render_template('index.html', jobs=jobs) |
35 |
| - |
36 |
| -@app.route('/job/<job_id>') |
37 |
| -def job(job_id): |
38 |
| - job = query_db( |
39 |
| - 'SELECT job.id, job.title, job.description, job.salary, employer.id as employer_id, employer.name as employer_name' |
40 |
| - ' FROM job JOIN employer ON employer.id = job.employer_id' |
41 |
| - ' WHERE job.id = ?', [job_id], True) |
42 |
| - return render_template('job.html', job=job) |
43 |
| - |
44 |
| -@app.route('/employer/<employer_id>') |
45 |
| -def employer(employer_id): |
46 |
| - employer = query_db('SELECT * FROM employer WHERE id=?', [employer_id], True) |
47 |
| - jobs = query_db( |
48 |
| - 'SELECT job.id, job.title, job.description, job.salary' |
49 |
| - ' FROM job JOIN employer ON employer.id = job.employer_id' |
50 |
| - ' WHERE employer.id = ?', [employer_id]) |
51 |
| - reviews = query_db( |
52 |
| - 'SELECT review, rating, title, date, status' |
53 |
| - ' FROM review JOIN employer ON employer.id = review.employer_id' |
54 |
| - ' WHERE employer.id = ?', [employer_id]) |
55 |
| - return render_template('employer.html', employer=employer, jobs=jobs, reviews=reviews) |
56 |
| - |
57 |
| -@app.route('/employer/<employer_id>/review', methods=('GET', 'POST')) |
58 |
| -def review(employer_id): |
59 |
| - if request.method == 'POST': |
60 |
| - review = request.form['review'] |
61 |
| - rating = request.form['rating'] |
62 |
| - title = request.form['title'] |
63 |
| - date = datetime.datetime.now().strftime("%m/%d/%Y") |
64 |
| - status = request.form['status'] |
65 |
| - error = None |
66 |
| - |
67 |
| - if not review: |
68 |
| - error = 'Review is required.' |
69 |
| - elif not rating: |
70 |
| - error = 'Rating is required.' |
71 |
| - elif not title: |
72 |
| - error = 'Title is required.' |
73 |
| - |
74 |
| - if error is not None: |
75 |
| - flash(error) |
76 |
| - else: |
77 |
| - db = get_db() |
78 |
| - db.execute( |
79 |
| - 'INSERT INTO review (review, rating, title, date, status, employer_id)' |
80 |
| - ' VALUES (?, ?, ?, ?, ?, ?)', |
81 |
| - (review, rating, title, date, status, employer_id) |
82 |
| - ) |
83 |
| - db.commit() |
84 |
| - return redirect(url_for('employer', employer_id=employer_id)) |
85 |
| - |
86 |
| - return render_template('review.html', employer_id=employer_id) |
87 |
| - |
88 |
| -@app.route('/admin') |
89 |
| -def admin(): |
90 |
| - jobs = query_db( |
91 |
| - 'SELECT job.id, job.title, job.description, job.salary, employer.id as employer_id, employer.name as employer_name' |
92 |
| - ' FROM job JOIN employer ON employer.id = job.employer_id') |
93 |
| - return render_template('admin/index.html', jobs=jobs) |
94 |
| - |
95 |
| -@app.route('/admin/create', methods=('GET', 'POST')) |
96 |
| -def create(): |
97 |
| - if request.method == 'POST': |
98 |
| - title = request.form['title'] |
99 |
| - description = request.form['description'] |
100 |
| - salary = request.form['salary'] |
101 |
| - employer_id = request.form['employer_id'] |
102 |
| - error = None |
103 |
| - |
104 |
| - if not title: |
105 |
| - error = 'Title is required.' |
106 |
| - elif not employer_id: |
107 |
| - error = 'Employer is required.' |
108 |
| - |
109 |
| - if error is not None: |
110 |
| - flash(error) |
111 |
| - else: |
112 |
| - db = get_db() |
113 |
| - db.execute( |
114 |
| - 'INSERT INTO job (title, description, salary, employer_id)' |
115 |
| - ' VALUES (?, ?, ?, ?)', |
116 |
| - (title, description, salary, employer_id) |
117 |
| - ) |
118 |
| - db.commit() |
119 |
| - return redirect(url_for('admin')) |
120 |
| - |
121 |
| - employers = query_db('SELECT id, name FROM employer') |
122 |
| - return render_template('admin/create.html', employers=employers) |
0 commit comments