Merge branch 'profile-pics'
This commit is contained in:
commit
64510a9d79
4 changed files with 56 additions and 5 deletions
28
Tweeder.py
28
Tweeder.py
|
@ -1,5 +1,5 @@
|
||||||
from flask import Flask, render_template, request, redirect, url_for, session
|
from flask import Flask, render_template, request, redirect, url_for, session, make_response, abort
|
||||||
from backend import accounts, timeline
|
from backend import accounts, timeline, files
|
||||||
|
|
||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
app.secret_key = "eVZ4EmVK70iETb03KqDAXV5sBHb3T73t"
|
app.secret_key = "eVZ4EmVK70iETb03KqDAXV5sBHb3T73t"
|
||||||
|
@ -127,16 +127,26 @@ def user_settings():
|
||||||
else:
|
else:
|
||||||
return redirect(url_for('login'))
|
return redirect(url_for('login'))
|
||||||
elif request.method == "POST":
|
elif request.method == "POST":
|
||||||
|
print(request.files)
|
||||||
|
print(request.form)
|
||||||
if 'username' not in session.keys():
|
if 'username' not in session.keys():
|
||||||
return redirect(url_for('login'))
|
return redirect(url_for('login'))
|
||||||
profile = {
|
updated_profile = {
|
||||||
'bio': request.form['bio'],
|
'bio': request.form['bio'],
|
||||||
'gender': request.form['gender'],
|
'gender': request.form['gender'],
|
||||||
'location': request.form['location']
|
'location': request.form['location']
|
||||||
}
|
}
|
||||||
|
if 'profile_pic' in request.files.keys():
|
||||||
|
if request.files['profile_pic'].filename == '':
|
||||||
|
if accounts.account_details(session['username'].lower())['profile']['profile_pic']:
|
||||||
|
profile_pic = accounts.account_details(session['username'].lower())['profile']['profile_pic']
|
||||||
|
updated_profile['profile_pic'] = profile_pic
|
||||||
|
else:
|
||||||
|
profile_pic = files.upload_file(request.files['profile_pic'])
|
||||||
|
updated_profile['profile_pic'] = profile_pic
|
||||||
accounts.set_theme(session['username'].lower(), request.form['theme'])
|
accounts.set_theme(session['username'].lower(), request.form['theme'])
|
||||||
username = session['username']
|
username = session['username']
|
||||||
accounts.update_profile(username, profile)
|
accounts.update_profile(username, updated_profile)
|
||||||
return redirect(request.referrer)
|
return redirect(request.referrer)
|
||||||
|
|
||||||
|
|
||||||
|
@ -216,5 +226,15 @@ def unlike_post(post_id):
|
||||||
elif request.method == "GET":
|
elif request.method == "GET":
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
@app.route("/files/<oid>", methods=['GET'])
|
||||||
|
def get_file(oid):
|
||||||
|
fl = files.get_file(oid)
|
||||||
|
if not fl: return abort(404)
|
||||||
|
response = make_response(fl.read())
|
||||||
|
response.mimetype = fl.content_type
|
||||||
|
return response
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
app.run(host="127.0.0.1", debug=True)
|
app.run(host="127.0.0.1", debug=True)
|
||||||
|
|
25
backend/files.py
Normal file
25
backend/files.py
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
from pymongo import MongoClient
|
||||||
|
from bson.objectid import ObjectId
|
||||||
|
from gridfs.errors import NoFile
|
||||||
|
from werkzeug.utils import secure_filename
|
||||||
|
import gridfs
|
||||||
|
|
||||||
|
client = MongoClient()
|
||||||
|
db = client.tweeder
|
||||||
|
files_db = gridfs.GridFS(client.tweeder_files)
|
||||||
|
accounts_db = db.accounts
|
||||||
|
|
||||||
|
|
||||||
|
def get_file(oid):
|
||||||
|
try:
|
||||||
|
return files_db.get(ObjectId(oid))
|
||||||
|
except NoFile:
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def upload_file(file_to_upload):
|
||||||
|
if file_to_upload.filename == '':
|
||||||
|
return False
|
||||||
|
filename = secure_filename(file_to_upload.filename)
|
||||||
|
obj = files_db.put(file_to_upload, content_type=file_to_upload.content_type, filename=filename)
|
||||||
|
return obj
|
|
@ -3,6 +3,9 @@
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="jumbotron">
|
<div class="jumbotron">
|
||||||
|
{% if user.profile.profile_pic %}
|
||||||
|
<img src="/files/{{ user.profile.profile_pic }}" class="rounded float-left" style="margin-right: 24px; max-height: 100px;"/>
|
||||||
|
{% endif %}
|
||||||
<h1>{% if user.verified %} <i class="fas fa-shield-check" alt="Verified"></i> {% endif %}{{ user.displayname }} <small>on Tweeder</small></h1>
|
<h1>{% if user.verified %} <i class="fas fa-shield-check" alt="Verified"></i> {% endif %}{{ user.displayname }} <small>on Tweeder</small></h1>
|
||||||
<h2>
|
<h2>
|
||||||
{% if user.profile.bio %}
|
{% if user.profile.bio %}
|
||||||
|
@ -11,6 +14,7 @@
|
||||||
Tweeder user since 1984
|
Tweeder user since 1984
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</h2>
|
</h2>
|
||||||
|
<div style="clear:both"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
|
|
|
@ -3,8 +3,10 @@
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<h1>Settings for {{ logged_in }}</h1><hr />
|
<h1>Settings for {{ logged_in }}</h1><hr />
|
||||||
<form method="POST" action="/settings" class="col-lg-6">
|
<form method="POST" action="/settings" class="col-lg-6" enctype="multipart/form-data">
|
||||||
<div class="form-group row">
|
<div class="form-group row">
|
||||||
|
<h2>Profile Picture</h2>
|
||||||
|
<input type="file" name="profile_pic" size="40">
|
||||||
<h2>Profile Fields</h2>
|
<h2>Profile Fields</h2>
|
||||||
|
|
||||||
<div class="input-group mb-3">
|
<div class="input-group mb-3">
|
||||||
|
|
Loading…
Add table
Reference in a new issue