Skip to content

Commit ccec004

Browse files
author
Michael Zhang
committed
Basic profile page.
1 parent caf803c commit ccec004

File tree

7 files changed

+582
-12
lines changed

7 files changed

+582
-12
lines changed

migrations/versions/d25be15cb75d_.py

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
"""empty message
2+
3+
Revision ID: d25be15cb75d
4+
Revises: 8a9998406bc7
5+
Create Date: 2016-09-01 04:30:13.101046
6+
7+
"""
8+
9+
# revision identifiers, used by Alembic.
10+
revision = 'd25be15cb75d'
11+
down_revision = '8a9998406bc7'
12+
13+
from alembic import op
14+
import sqlalchemy as sa
15+
16+
17+
def upgrade():
18+
### commands auto generated by Alembic - please adjust! ###
19+
op.add_column('users', sa.Column('joined', sa.DateTime(), nullable=True))
20+
### end Alembic commands ###
21+
22+
23+
def downgrade():
24+
### commands auto generated by Alembic - please adjust! ###
25+
op.drop_column('users', 'joined')
26+
### end Alembic commands ###

models.py

+1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ class User(db.Model):
2121
email = db.Column(db.Unicode(length=128), unique=True)
2222
_password = db.Column('password', db.String(length=60)) # password hash
2323
admin = db.Column(db.Boolean, default=False)
24+
joined = db.Column(db.DateTime, default=datetime.utcnow)
2425

2526
def __eq__(self, other):
2627
if isinstance(other, User):

static/images/user.jpg

21.5 KB
Loading

static/js/livestamp.js

+500
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

templates/layout.html

+1-3
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,7 @@
1313
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"
1414
integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS"
1515
crossorigin="anonymous"></script>
16-
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-timeago/1.5.2/jquery.timeago.min.js"
17-
integrity="sha384-MPCI/e9mKGaS5YksJEmlTIIonpSyYnitbS7p4y7v5WAJ3VPkNcRbnFzu4wWIhf7Z"
18-
crossorigin="anonymous"></script>
16+
<script src="/js/livestamp.js"></script>
1917
</head>
2018
<body>
2119
<nav role="navigation" class="navbar navbar-default">

templates/users/profile.html

+47-8
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,57 @@
11
{% extends "layout.html" %}
22

33
{% block title %}
4-
Home
4+
{{ user.username }}
55
{% endblock %}
66

77
{% block content %}
8-
<div class="panel panel-default">
9-
<div class="panel-heading">
10-
<h4 class="panel-title">
11-
{{ user.username }}
12-
</h4>
8+
<div class="row">
9+
<div class="col-sm-3 col-xs-12">
10+
<div class="panel panel-default">
11+
<div class="panel-body">
12+
<div style="width:100%;max-width:100%;">
13+
<img src="/avatar/{{ user.id }}?{{ timestamp }}" id="avatar" style="width:100%;max-height:256px;"/>
14+
</div>
15+
<h2 style="margin:0px;font-weight:bold;font-size:2em;">{{ user.name }}</h2>
16+
<small style="display:block;font-size:1.5em;color:#999;">@{{ user.username }}</small>
17+
<hr>
18+
<div ng-show="user['show_email']==true">
19+
<i class="fa fa-fw fa-envelope"></i>
20+
<a style="color:#666;" href="mailto:{{ user.email }}">
21+
<span id="email">{{ user.email }}</span>
22+
</a>
23+
</div>
24+
<div>
25+
<i class="fa fa-fw fa-clock-o"></i>
26+
Joined
27+
<time data-livestamp="{{ user.joined.strftime('%s') }}"></time>
28+
</div>
29+
</div>
30+
</div>
1331
</div>
14-
<div class="panel-body">
15-
Hi. This is {% if user == current_user %} your {% else %} a {% endif %} profile. There's nothing here, tho.
32+
<div class="col-sm-9 col-xs-12">
33+
<ul class="nav nav-tabs" role="tablist">
34+
<li role="presentation" class="active"><a href="#profile" aria-controls="profile" role="tab" data-toggle="tab">Profile</a></li>
35+
<li role="presentation"><a href="#activity" aria-controls="activity" role="tab" data-toggle="tab">Activity</a></li>
36+
<a href="/settings" class="btn btn-primary" style="float:right;" ng-show="user['me']==true"><i class="fa fa-fw fa-pencil"></i> Edit Profile</a>
37+
</ul>
38+
<div class="tab-content">
39+
<div role="tabpanel" class="tab-pane active" id="profile">
40+
<div class="page-header">
41+
<h1>{{ user.username }}</h1>
42+
</div>
43+
<div class="panel panel-default">
44+
<table class="table">
45+
</table>
46+
</div>
47+
</div>
48+
<div role="tabpanel" class="tab-pane" id="activity">
49+
<div class="panel panel-default">
50+
<table class="table">
51+
</table>
52+
</div>
53+
</div>
54+
</div>
1655
</div>
1756
</div>
1857
{% endblock %}

views/users.py

+7-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from flask import Blueprint, render_template, redirect, url_for
1+
from flask import Blueprint, render_template, redirect, url_for, send_file
22
from flask_login import current_user, login_required, login_user, logout_user
33

44
from forms import LoginForm, RegisterForm
@@ -39,6 +39,12 @@ def logout():
3939
return redirect(url_for('base.index'))
4040

4141

42+
@blueprint.route('/avatar/<int:user_id>')
43+
def user_avatar(user_id):
44+
user = User.query.get_or_404(user_id)
45+
return send_file('static/images/user.jpg')
46+
47+
4248
@blueprint.route('/profile', methods=['GET'])
4349
@login_required
4450
def profile():

0 commit comments

Comments
 (0)