WIP on design & models

This commit is contained in:
Dark-Storm 2018-11-01 21:01:05 +01:00
parent 1066c776cd
commit 0c015158ce
Signed by untrusted user: Darks
GPG Key ID: F61F10FA138E797C
5 changed files with 137 additions and 36 deletions

36
app/models/models.py Normal file
View File

@ -0,0 +1,36 @@
# from datetime import datetime
# from app import db, login
# from flask_login import UserMixin
# from werkzeug.security import generate_password_hash, check_password_hash
# # class User(UserMixin, db.Model):
# # id = db.Column(db.Integer, primary_key=True)
# # username = db.Column(db.String(64), index=True, unique=True)
# # email = db.Column(db.String(120), index=True, unique=True)
# # password_hash = db.Column(db.String(128))
# # posts = db.relationship('Post', backref='author', lazy='dynamic')
# # def __repr__(self):
# # return '<User {}>'.format(self.username)
# # def set_password(self, password):
# # self.password_hash = generate_password_hash(password)
# # def check_password(self, password):
# # return check_password_hash(self.password_hash, password)
# # @login.user_loader
# # def load_user(id):
# # return User.query.get(int(id))
# class Post(db.Model):
# id = db.Column(db.Integer, primary_key=True)
# body = db.Column(db.String(140))
# timestamp = db.Column(db.DateTime, index=True, default=datetime.now)
# user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
# def __repr__(self):
# return '<Post {}>'.format(self.body)

View File

@ -2,28 +2,42 @@ from datetime import date, datetime
from app import db, login
from flask_login import UserMixin
from werkzeug.security import generate_password_hash, check_password_hash
from app.models.contents import Content
class User(UserMixin, db.Model):
id = db.Column(db.Integer, primary_key=True)
contents = db.relationship('Content') # TODO: add good relation
__tablename__ = 'user'
id = db.Column(db.Integer, primary_key=True)
type = db.Column(db.String(20))
__mapper_args__ = {
'polymorphic_identity': __tablename__,
'polymorphic_on': type
}
contents = db.relationship('Content', back_populates="author") # TODO: add good relation
def __repr__(self):
return f'<User #{self.id}>'
class Member(User, db.Model):
# Standalone properties
__tablename__ = 'member'
id = db.Column(db.Integer, db.ForeignKey('user.id'), primary_key=True)
__mapper_args__ = { 'polymorphic_identity': __tablename__ }
# Standalone properties
username = db.Column(db.Unicode(64), index=True, unique=True)
email = db.Column(db.String(120), index=True, unique=True)
password_hash = db.Column(db.String(128))
contents = db.relationship('Content', backref='author', lazy='dynamic')
password_hash = db.Column(db.String(255))
xp_points = db.Column(db.Integer)
innovation_points = db.Column(db.Integer)
biography = db.column(db.Text, convert_unicode=True)
signature = db.column(db.Text, convert_unicode=True)
biography = db.column(db.Text(convert_unicode=True))
signature = db.column(db.Text(convert_unicode=True))
birthday = db.Column(db.Date)
register_date = db.Column(db.Date, default=date.today)
# Relations
trophies = db.relationship('Trophy') # TODO: add good relation
tests = db.relationship('Test') # TODO: add good relation
#trophies = db.relationship('Trophy') # TODO: add good relation
#tests = db.relationship('Test') # TODO: add good relation
# Privacy assets
receive_newsletter = db.column(db.Boolean, default=False)
receive_newsletter = db.Column(db.Boolean, default=False)
def __init__(self, username, email, password):
self.username = username
@ -75,20 +89,32 @@ class Member(User, db.Model):
self.innovation_points += n
def set_password(self, password):
self.password_hash = generate_password_hash(password)
self.password_hash = generate_password_hash(password,
method='pbkdf2:sha512', salt_length=10)
def check_password(self, password):
return check_password_hash(self.password_hash, password)
def __repr__(self):
return '<User {}>'.format(self.username)
return f'<Member {self.username}>'
@login.user_loader
def load_user(id):
return User.query.get(int(id))
class Guest(User, db.Model):
username = db.Column(db.Unicode(64), index=True)
ip = db.column(db.String(47)) # Max IPv6 adress length
last_post = db.Column(db.DateTime, default=datetime.now)
__tablename__ = 'guest'
id = db.Column(db.Integer, db.ForeignKey('user.id'), primary_key=True)
__mapper_args__ = { 'polymorphic_identity': __tablename__ }
# Standalone propeties
username = db.Column(db.Unicode(64), index=True)
ip = db.column(db.String(47)) # Max IPv6 adress length
last_post = db.Column(db.DateTime, default=datetime.now)
def __repr__(self):
return f'<Guest {self.username} ({self.ip})>'
# Can be implemented if needed
# class Organization(User, db.Model):
# username = db.Column(db.Unicode(64), index=True)
# members = db.relationship('Member')
# pass

View File

@ -0,0 +1,51 @@
#form {
width: 30%; min-width: 350px;
margin: auto;
}
form > div {
margin-bottom: 15px;
}
form > div > * {
display: block;
}
form > div > label {
margin-bottom: 5px;
}
form > div > input[type='text'],
form > div > input[type='email'],
form > div > input[type='password'] {
width: 96%; padding: 6px 2%;
border: 1px solid #abcdef;
}
form > div > input[type='text']:focus,
form > div > input[type='email']:focus,
form > div > input[type='password']:focus {
box-shadow: 0px 0px 3px 0px #0033ff;
}
form > div > input[type='submit'] {
width: 100%; padding: 6px 0;
background-color: #168f48;
border-color: #12753a;
color: #fff;
border-radius: 3px;
font-size: 14px;
font-weight: 400;
border: 1px solid transparent;
}
form > div > input[type='submit']:hover {
background-color: #168f48;
border-color: #12753a;
}
form .msgerror {
color: red;
font-weight: 400;
margin-top: 5px;
}

View File

@ -9,4 +9,6 @@
<link rel="stylesheet" media="all and (min-width: 700px)" type="text/css" href={{url_for('static', filename = 'css/container.css')}}>
<link rel="stylesheet" media="all and (min-width: 700px)" type="text/css" href={{url_for('static', filename = 'css/responsive.css')}}>
<link rel="stylesheet" media="all and (max-width: 699px)" type="text/css" href={{url_for('static', filename = 'css/light.css')}}>
<link rel="stylesheet" media="all and (min-width: 700px)" type="text/css" href={{url_for('static', filename = 'css/register.css')}}>
</head>

View File

@ -2,21 +2,7 @@
{% block content %}
<section class="home-pinned-content flex">
<div>
<h1>Planète Casio</h1>
<p>Pourquoi s'inscrire sur Planète Casio ? Parce que c'est cool et qu'ici on peut mettre plein de truc sympas.
Vous saviez que Planète Casio c'est :
<ul>
<li>Presque 10000 membres</li>
<li>(Bon ok, seulement une vingtaine de vraiments actifs)</li>
<li>Plein de programmes</li>
<li>Une multitude de tutos pour mieux comprendre comment fonctionne sa calto</li>
<li><b>Mais surtout, une communauté au top !</b></li>
</ul>
Et oui, ça fait beaucoup, mais bon, je commence à être à court de trucs à écrire ici, donc bon…
</p>
</div>
<div>
<div id="form">
<h1>Inscription :</h1>
<form action="" method="post">
@ -25,28 +11,28 @@
{{ form2.username.label }}
{{ form2.username() }}
{% for error in form2.username.errors %}
<span style="color: red;">[{{ error }}]</span>
<span class="msgerror">{{ error }}</span>
{% endfor %}
</div>
<div>
{{ form2.email.label }}
{{ form2.email() }}
{% for error in form2.email.errors %}
<span style="color: red;">[{{ error }}]</span>
<span class="msgerror">{{ error }}</span>
{% endfor %}
</div>
<div>
{{ form2.password.label }}
{{ form2.password() }}
{% for error in form2.password.errors %}
<span style="color: red;">[{{ error }}]</span>
<span class="msgerror">{{ error }}</span>
{% endfor %}
</div>
<div>
{{ form2.password2.label }}
{{ form2.password2() }}
{% for error in form2.password2.errors %}
<span style="color: red;">[{{ error }}]</span>
<span class="msgerror">{{ error }}</span>
{% endfor %}
</div>
<div>{{ form2.submit() }}</div>