From 0c015158cea7648314a14f4515a0a52ba31002ad Mon Sep 17 00:00:00 2001 From: Dark-Storm Date: Thu, 1 Nov 2018 21:01:05 +0100 Subject: [PATCH] WIP on design & models --- app/models/models.py | 36 +++++++++++++++++++ app/models/{user.py => users.py} | 60 +++++++++++++++++++++++--------- app/static/css/register.css | 51 +++++++++++++++++++++++++++ app/templates/base/head.html | 2 ++ app/templates/register.html | 24 +++---------- 5 files changed, 137 insertions(+), 36 deletions(-) create mode 100644 app/models/models.py rename app/models/{user.py => users.py} (60%) create mode 100644 app/static/css/register.css diff --git a/app/models/models.py b/app/models/models.py new file mode 100644 index 0000000..c2bead0 --- /dev/null +++ b/app/models/models.py @@ -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 ''.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 ''.format(self.body) diff --git a/app/models/user.py b/app/models/users.py similarity index 60% rename from app/models/user.py rename to app/models/users.py index b3a2494..157dbf1 100644 --- a/app/models/user.py +++ b/app/models/users.py @@ -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'' 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 ''.format(self.username) + return f'' + +@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'' # Can be implemented if needed # class Organization(User, db.Model): -# username = db.Column(db.Unicode(64), index=True) -# members = db.relationship('Member') \ No newline at end of file +# pass diff --git a/app/static/css/register.css b/app/static/css/register.css new file mode 100644 index 0000000..835cde3 --- /dev/null +++ b/app/static/css/register.css @@ -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; +} \ No newline at end of file diff --git a/app/templates/base/head.html b/app/templates/base/head.html index 9be58bc..17f728c 100644 --- a/app/templates/base/head.html +++ b/app/templates/base/head.html @@ -9,4 +9,6 @@ + + diff --git a/app/templates/register.html b/app/templates/register.html index f2b5725..bda7bc7 100644 --- a/app/templates/register.html +++ b/app/templates/register.html @@ -2,21 +2,7 @@ {% block content %}
-
-

Planète Casio

-

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 : -

    -
  • Presque 10000 membres
  • -
  • (Bon ok, seulement une vingtaine de vraiments actifs)
  • -
  • Plein de programmes
  • -
  • Une multitude de tutos pour mieux comprendre comment fonctionne sa calto
  • -
  • Mais surtout, une communauté au top !
  • -
- Et oui, ça fait beaucoup, mais bon, je commence à être à court de trucs à écrire ici, donc bon… -

-
-
+

Inscription :

@@ -25,28 +11,28 @@ {{ form2.username.label }} {{ form2.username() }} {% for error in form2.username.errors %} - [{{ error }}] + {{ error }} {% endfor %}
{{ form2.email.label }} {{ form2.email() }} {% for error in form2.email.errors %} - [{{ error }}] + {{ error }} {% endfor %}
{{ form2.password.label }} {{ form2.password() }} {% for error in form2.password.errors %} - [{{ error }}] + {{ error }} {% endfor %}
{{ form2.password2.label }} {{ form2.password2() }} {% for error in form2.password2.errors %} - [{{ error }}] + {{ error }} {% endfor %}
{{ form2.submit() }}