huylaughmad commited on
Commit
e71ceed
·
verified ·
1 Parent(s): da34db4

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +122 -15
app.py CHANGED
@@ -1,28 +1,52 @@
1
  import os
 
 
 
 
 
 
2
 
3
  # Thiết lập HF_HOME trước khi import huggingface_hub hoặc datasets
4
  os.environ["HF_HOME"] = "/app/hf_cache"
5
 
6
- from flask import Flask, render_template
7
- from datasets import load_dataset
8
- from huggingface_hub import login
9
- import pandas as pd
10
 
11
- app = Flask(__name__)
 
 
 
 
 
 
12
 
13
- # Đăng nhập Hugging Face
14
- HF_TOKEN = os.getenv("HF_TOKEN")
15
- print(f"HF_TOKEN: {HF_TOKEN}")
16
- login(token=HF_TOKEN)
17
 
18
- # Tải dataset
 
19
  try:
20
- dataset = load_dataset("huylaughmad/web", data_files={"case_studies": "case_studies.csv"}, use_auth_token=True)
21
  print(f"Dataset loaded: {dataset}")
22
  except Exception as e:
23
  print(f"Error loading dataset: {e}")
24
  dataset = {"case_studies": []}
25
 
 
 
 
 
 
 
 
 
 
 
 
 
 
26
  # Route kiểm tra server
27
  @app.route('/test')
28
  def test():
@@ -31,19 +55,19 @@ def test():
31
  # Route cho trang chủ
32
  @app.route('/')
33
  def index():
34
- cases = dataset['case_studies'][:6] if dataset['case_studies'] else []
35
  return render_template('index.html', cases=cases)
36
 
37
  # Route cho trang thư viện
38
  @app.route('/thuvien')
39
  def thuvien():
40
- cases = dataset['case_studies'] if dataset['case_studies'] else []
41
  return render_template('thuvien.html', cases=cases)
42
 
43
  # Route cho trang before/after
44
  @app.route('/bfat')
45
  def bfat():
46
- case = dataset['case_studies'][0] if dataset['case_studies'] else {}
47
  return render_template('bfat.html', case=case)
48
 
49
  # Route cho trang dịch vụ
@@ -59,8 +83,91 @@ def lienhe():
59
  # Route cho trang blog
60
  @app.route('/blog')
61
  def blog():
62
- posts = []
63
  return render_template('blog.html', posts=posts)
64
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
65
  if __name__ == '__main__':
66
  app.run(host='0.0.0.0', port=7860, debug=True)
 
1
  import os
2
+ import json
3
+ from flask import Flask, render_template, request, redirect, url_for, abort
4
+ from datasets import load_dataset
5
+ from werkzeug.security import generate_password_hash, check_password_hash
6
+
7
+ app = Flask(__name__)
8
 
9
  # Thiết lập HF_HOME trước khi import huggingface_hub hoặc datasets
10
  os.environ["HF_HOME"] = "/app/hf_cache"
11
 
12
+ # Đường dẫn đến file data.json
13
+ DATA_FILE = "/app/data.json"
 
 
14
 
15
+ # Hàm đọc dữ liệu từ file
16
+ def load_data():
17
+ try:
18
+ with open(DATA_FILE, "r") as f:
19
+ return json.load(f)
20
+ except FileNotFoundError:
21
+ return {"case_studies": [], "blog_posts": []}
22
 
23
+ # Hàm ghi dữ liệu vào file
24
+ def save_data(data):
25
+ with open(DATA_FILE, "w") as f:
26
+ json.dump(data, f, indent=4)
27
 
28
+ # Tải dataset từ Hugging Face (nếu cần đồng bộ)
29
+ HF_TOKEN = os.getenv("HF_TOKEN")
30
  try:
31
+ dataset = load_dataset("huylaughmad/web", data_files={"case_studies": "case_studies.csv"}, token=HF_TOKEN)
32
  print(f"Dataset loaded: {dataset}")
33
  except Exception as e:
34
  print(f"Error loading dataset: {e}")
35
  dataset = {"case_studies": []}
36
 
37
+ # Tải dữ liệu từ file cục bộ
38
+ data = load_data()
39
+
40
+ # Bảo mật cơ bản cho CMS
41
+ ADMIN_USERNAME = "admin"
42
+ ADMIN_PASSWORD_HASH = generate_password_hash("password") # Đổi mật khẩu tại đây
43
+
44
+ def check_auth():
45
+ auth = request.authorization
46
+ if not auth or auth.username != ADMIN_USERNAME or not check_password_hash(ADMIN_PASSWORD_HASH, auth.password):
47
+ return False
48
+ return True
49
+
50
  # Route kiểm tra server
51
  @app.route('/test')
52
  def test():
 
55
  # Route cho trang chủ
56
  @app.route('/')
57
  def index():
58
+ cases = data['case_studies'][:6]
59
  return render_template('index.html', cases=cases)
60
 
61
  # Route cho trang thư viện
62
  @app.route('/thuvien')
63
  def thuvien():
64
+ cases = data['case_studies']
65
  return render_template('thuvien.html', cases=cases)
66
 
67
  # Route cho trang before/after
68
  @app.route('/bfat')
69
  def bfat():
70
+ case = data['case_studies'][0] if data['case_studies'] else {}
71
  return render_template('bfat.html', case=case)
72
 
73
  # Route cho trang dịch vụ
 
83
  # Route cho trang blog
84
  @app.route('/blog')
85
  def blog():
86
+ posts = data['blog_posts']
87
  return render_template('blog.html', posts=posts)
88
 
89
+ # Route cho trang CMS
90
+ @app.route('/cms')
91
+ def cms():
92
+ if not check_auth():
93
+ abort(401) # Trả về lỗi 401 nếu không xác thực
94
+ cases = data['case_studies']
95
+ return render_template('cms.html', cases=cases)
96
+
97
+ # Route để thêm case study mới
98
+ @app.route('/cms/cases/new', methods=['GET', 'POST'])
99
+ def add_case():
100
+ if not check_auth():
101
+ abort(401)
102
+ if request.method == 'POST':
103
+ new_case = {
104
+ "id": len(data['case_studies']) + 1,
105
+ "title": request.form['case-title'],
106
+ "treatment": request.form['case-treatment'],
107
+ "description": request.form['case-description'],
108
+ "before_image": request.form.get('case-before-image', ''),
109
+ "after_image": request.form.get('case-after-image', ''),
110
+ "patient_name": request.form.get('case-patient-name', ''),
111
+ "patient_age": request.form.get('case-patient-age', ''),
112
+ "patient_rating": request.form.get('case-patient-rating', '5'),
113
+ "patient_avatar": request.form.get('case-patient-avatar', ''),
114
+ "status": request.form.get('case-status', 'draft'),
115
+ "date": request.form.get('case-date', ''),
116
+ "duration": request.form.get('case-duration', ''),
117
+ "visits": request.form.get('case-visits', ''),
118
+ "case_id": request.form.get('case-id', ''),
119
+ "seo_title": request.form.get('case-seo-title', ''),
120
+ "seo_description": request.form.get('case-seo-description', ''),
121
+ "seo_keywords": request.form.get('case-seo-keywords', '')
122
+ }
123
+ data['case_studies'].append(new_case)
124
+ save_data(data)
125
+ return redirect(url_for('cms'))
126
+ return render_template('cms.html', section='case-editor-section', case=None)
127
+
128
+ # Route để chỉnh sửa case study
129
+ @app.route('/cms/cases/edit/<int:id>', methods=['GET', 'POST'])
130
+ def edit_case(id):
131
+ if not check_auth():
132
+ abort(401)
133
+ case = next((c for c in data['case_studies'] if c['id'] == id), None)
134
+ if not case:
135
+ return "Case not found", 404
136
+ if request.method == 'POST':
137
+ case['title'] = request.form['case-title']
138
+ case['treatment'] = request.form['case-treatment']
139
+ case['description'] = request.form['case-description']
140
+ case['before_image'] = request.form.get('case-before-image', '')
141
+ case['after_image'] = request.form.get('case-after-image', '')
142
+ case['patient_name'] = request.form.get('case-patient-name', '')
143
+ case['patient_age'] = request.form.get('case-patient-age', '')
144
+ case['patient_rating'] = request.form.get('case-patient-rating', '5')
145
+ case['patient_avatar'] = request.form.get('case-patient-avatar', '')
146
+ case['status'] = request.form.get('case-status', 'draft')
147
+ case['date'] = request.form.get('case-date', '')
148
+ case['duration'] = request.form.get('case-duration', '')
149
+ case['visits'] = request.form.get('case-visits', '')
150
+ case['case_id'] = request.form.get('case-id', '')
151
+ case['seo_title'] = request.form.get('case-seo-title', '')
152
+ case['seo_description'] = request.form.get('case-seo-description', '')
153
+ case['seo_keywords'] = request.form.get('case-seo-keywords', '')
154
+ save_data(data)
155
+ return redirect(url_for('cms'))
156
+ return render_template('cms.html', section='case-editor-section', case=case)
157
+
158
+ # Route để xóa case study
159
+ @app.route('/cms/cases/delete/<int:id>')
160
+ def delete_case(id):
161
+ if not check_auth():
162
+ abort(401)
163
+ data['case_studies'] = [c for c in data['case_studies'] if c['id'] != id]
164
+ save_data(data)
165
+ return redirect(url_for('cms'))
166
+
167
+ # Xử lý lỗi 401
168
+ @app.errorhandler(401)
169
+ def unauthorized(e):
170
+ return "Unauthorized - Vui lòng đăng nhập", 401
171
+
172
  if __name__ == '__main__':
173
  app.run(host='0.0.0.0', port=7860, debug=True)