質問編集履歴

1

コードを編集しました

2022/04/19 15:41

投稿

dabi
dabi

スコア6

test CHANGED
File without changes
test CHANGED
@@ -1,5 +1,7 @@
1
1
  flask-loginでappにログイン機能を実装し、ローカル環境ではログインするとうまくいきました。しかし、コアサーバーにそれをアップロードし、そこからログインしようとするとUnauthorizedのエラーが出てしまいます。
2
2
  また、ブラウザchrome以外だとユーザー新規登録の時にエラーが発生、そしてChromeでもユーザー名などを日本語にするとエラーが起きてしまいます。(ローカルでは、日本語でも問題なく登録できた。)なぜこのようなエラーが出るのかを突き止めたいです。
3
+ ※追記
4
+ index.pyを編集しました。
3
5
 
4
6
  ```階層
5
7
  app─┬─index.py
@@ -35,6 +37,9 @@
35
37
  ```
36
38
 
37
39
  ```index.py
40
+ import os
41
+ import random, string
42
+ import math
38
43
  from flask import Flask, render_template, request, redirect, url_for, g, session, flash
39
44
  from flask_sqlalchemy import SQLAlchemy
40
45
  from flask_login import LoginManager, UserMixin, current_user, login_user, login_required, logout_user
@@ -46,51 +51,172 @@
46
51
  app.config['SECRET_KEY'] = os.urandom(24)
47
52
  db = SQLAlchemy(app)
48
53
 
54
+ app.config['UPLOAD_FOLDER'] = 'static/images'
55
+ app.config['MAX_CONTENT_LENGTH'] = 16 * 1000 * 1000
56
+
49
57
  login_manager = LoginManager()
50
58
  login_manager.init_app(app)
51
59
 
60
+
61
+
52
62
  class User(UserMixin, db.Model):
53
63
  id = db.Column(db.Integer, primary_key=True)
54
64
  username = db.Column(db.String(50))
55
65
  password = db.Column(db.String(25))
66
+ mail = db.Column(db.String(64))
67
+ msg = db.Column(db.String(500))
68
+ voting = db.Column(db.String(3))
69
+ video_query = db.Column(db.String(3))
70
+ rep = db.Column(db.Float)
71
+ star = db.Column(db.Integer)
72
+
73
+ def get_id(self):
74
+ return self.id
75
+
76
+ def is_authenticated(self):
77
+ return True
78
+
79
+ def is_anonymous(self):
80
+ return False
81
+
82
+ def is_active(self):
83
+ return False
84
+
85
+ class User_mail(UserMixin, db.Model):
86
+ id = db.Column(db.Integer, primary_key=True)
87
+ username = db.Column(db.String(50))
88
+ mail = db.Column(db.String(64))
89
+
90
+ class Vote(UserMixin, db.Model):
91
+ __tablename__ = "vote"
92
+ id = db.Column(db.Integer, primary_key=True)
93
+ voted_mail = db.Column(db.String(64))
94
+ vote_mail = db.Column(db.String(64))
95
+
96
+ class VideoVote(db.Model):
97
+ id = db.Column(db.Integer, primary_key=True)
98
+ video_voted_mail = db.Column(db.String(64))
99
+ video_vote_mail = db.Column(db.String(64))
100
+
101
+
102
+ class Hit(db.Model):
103
+ id = db.Column(db.Integer, primary_key=True)
104
+ star_mail = db.Column(db.String(64))
105
+ hit_mail = db.Column(db.String(64))
106
+ hit_id = db.Column(db.String(64))
107
+
108
+ class VideoHit(db.Model):
109
+ id = db.Column(db.Integer, primary_key=True)
110
+ video_star_mail = db.Column(db.String(64))
111
+ video_hit_mail = db.Column(db.String(64))
112
+ video_hit_id = db.Column(db.Integer)
113
+
114
+ class ForRep(db.Model):
115
+ id = db.Column(db.Integer, primary_key=True)
116
+ video_star_mail = db.Column(db.String(64))
117
+ video_hit_mail = db.Column(db.String(64))
118
+
119
+ class GroupVideo(db.Model):
120
+ id = db.Column(db.Integer, primary_key=True)
121
+ one = db.Column(db.Integer)
122
+ two = db.Column(db.Integer)
123
+ three = db.Column(db.Integer)
124
+ four = db.Column(db.Integer)
125
+ five = db.Column(db.Integer)
126
+ group_id = db.Column(db.Integer)
127
+
128
+ def randomname(n):
129
+ randlst = [random.choice(string.ascii_letters + string.digits) for i in range(n)]
130
+ return ''.join(randlst)
131
+
132
+ db.create_all()
133
+
134
+
135
+ @login_manager.user_loader
136
+ def load_user(user_id):
137
+ return User.query.get(int(user_id))
56
138
 
57
139
  @app.route('/')
58
140
  def index():
59
- redirect('/register')
141
+ return render_template('index.html')
60
142
 
61
143
  @app.route('/register', methods=['POST', 'GET'])
62
144
  def register():
63
145
  if request.method == "POST":
64
146
  username = request.form.get('name')
65
147
  password = request.form.get('password')
148
+ mailaddress = request.form.get('mail')
149
+ mailg ='@' in mailaddress
150
+ mailgd = '.' in mailaddress
151
+ print(mailg)
152
+ if mailg == False:
153
+ return redirect('/register_w3')
154
+ if mailgd == False:
155
+ return redirect('/register_w3')
156
+ print(username + ':' + password + ':' + mailaddress)
157
+ # Userのインスタンスを作成
158
+ if username == '':
159
+ return redirect('/register')
160
+ elif password == '':
161
+ return redirect('/register')
162
+ elif mailaddress == '':
163
+ return redirect('/register')
164
+ elif User_mail.query.filter_by(mail=mailaddress).first():
165
+ return redirect('/register')
166
+ else:
66
- user = User(username=username, password=generate_password_hash(password, method='sha256'))
167
+ user = User(username=username, password=generate_password_hash(password, method='sha256'), mail=mailaddress, msg="なし", rep=4, star=0)
67
- db.session.add(user)
168
+ db.session.add(user)
68
- db.session.commit()
169
+ db.session.commit()
170
+ user_mail = User_mail(username=username, mail=mailaddress)
171
+ db.session.add(user_mail)
172
+ db.session.commit()
173
+ print(mailaddress)
69
- return redirect('/login')
174
+ return redirect('/login')
70
- else:
175
+ else:
71
176
  return render_template('register.html')
72
177
 
73
- @app.route('/login')
178
+ @app.route('/login', methods=['GET', 'POST'])
74
- def index():
179
+ def login():
75
180
  if request.method == "POST":
76
181
 
77
182
  username = request.form.get('name')
78
183
  password = request.form.get('password')
184
+ # Userテーブルからusernameに一致するユーザを取得
79
185
  user = User.query.filter_by(username=username).first()
80
186
  if user:
81
187
  if check_password_hash(user.password, password):
82
188
  login_user(user)
189
+ print(current_user.username)
83
190
  return redirect('/myhome')
84
191
  else:
85
- return redirect('/login')
192
+ return redirect('/login')
86
193
  else:
87
- return redirect('/login')
194
+ return redirect('/login')
88
195
  else:
89
196
  return render_template('login.html')
90
197
 
198
+
199
+
91
200
  @app.route('/myhome')
201
+ @login_required
92
202
  def myhome():
203
+ if VideoHit.query.filter_by(video_hit_mail=current_user.mail).first():
204
+ for i in VideoHit.query.filter_by(video_hit_mail=current_user.mail).all():
205
+ db.session.delete(i)
206
+ db.session.commit()
207
+ elif VideoHit.query.filter_by(video_star_mail=current_user.mail).first():
208
+ for i in VideoHit.query.filter_by(video_star_mail=current_user.mail).all():
209
+ db.session.delete(i)
210
+ db.session.commit()
211
+ current_user.video_query = 'off'
93
- return render_template('myhome.html')
212
+ current_user.voting = 'off'
213
+ db.session.commit()
214
+ blogarticles = User.query.all()
215
+ votes = Vote.query.filter_by(vote_mail = current_user.mail).all()
216
+ voted_mails = []
217
+ for i in votes:
218
+ voted_mails.append(i.voted_mail)
219
+ return render_template('myhome.html', voted_mails=voted_mails, current_user=current_user, username=current_user.username, blogarticles=blogarticles, math=math, int=int, str=str, os=os)
94
220
 
95
221
  ```
96
222