diff --git a/app.db b/app.db new file mode 100644 index 0000000..89e46c5 Binary files /dev/null and b/app.db differ diff --git a/app.py b/app.py index f652c41..e708181 100644 --- a/app.py +++ b/app.py @@ -9,13 +9,45 @@ app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False app.secret_key = "SAFmdsdDkSukyuDd" db = SQLAlchemy(app) +MAX_NAME_LENGTH = 30 +MAX_PASSWORD_LENGTH = 30 +MAX_PARAM_LENGTH = 30 +NONE_VALUE = "None" + + +class UserData(db.Model): + id = db.Column(db.Integer, primary_key = True) + name = db.Column(db.String(MAX_NAME_LENGTH), unique=True, nullable=False) + password = db.Column(db.String(MAX_PASSWORD_LENGTH), nullable=False) + interest1 = db.Column(db.String(MAX_PARAM_LENGTH), nullable=False) + interest2 = db.Column(db.String(MAX_PARAM_LENGTH), nullable=False) + interest3 = db.Column(db.String(MAX_PARAM_LENGTH), nullable=False) + usr_lang = db.Column(db.String(MAX_PARAM_LENGTH), nullable=False) + foreign_lang = db.Column(db.String(MAX_PARAM_LENGTH), nullable=False) + # add password hash instead of password + +db.create_all() + + @app.route("/", methods=["POST", "GET"]) def login(): if request.method == "POST": name = request.form["name"] password = request.form["password"] + if UserData.query.filter_by(name=name).count() == 0: + db.session.add(UserData(name=name, password=password, + interest1=NONE_VALUE, interest2=NONE_VALUE, interest3=NONE_VALUE, + usr_lang=NONE_VALUE, foreign_lang=NONE_VALUE)) + db.session.commit() + print("Added user " + name) + elif UserData.query.filter_by(name=name).first().password != password: + print("Wrong password") # later - popup + return render_template("login.html", form_msg="Wrong password") session["user_name"] = name session["user_password"] = password + if len(name) >= MAX_NAME_LENGTH and len(password) >= MAX_PASSWORD_LENGTH: + print("Too long name / password") # later - popup + return render_template("login.html", form_msg="Too long name / password") return redirect(url_for("user_page", user_name=name)) else: if "user_name" in session: @@ -23,8 +55,74 @@ def login(): return render_template("login.html") -@app.route("/") +def create_interests_list(usr): + a = [] + if usr.interest1 != NONE_VALUE: + a.append(usr.interest1) + if usr.interest2 != NONE_VALUE: + a.append(usr.interest2) + if usr.interest3 != NONE_VALUE: + a.append(usr.interest3) + return a + + +def get_matching_users(usr): + users = [] + if usr.usr_lang != NONE_VALUE and usr.foreign_lang != NONE_VALUE: + users = UserData.query.filter_by(usr_lang=usr.foreign_lang) \ + .filter_by(foreign_lang=usr.usr_lang).all() + else: + users = UserData.query.all() + matching_list = [] + a = create_interests_list(usr) + for user in users: + if user == usr: + continue + b = create_interests_list(user) + match = False + same_interest = "" + for x in a: + for y in b: + if x == y: + match = True + same_interest = x + break + if match: + break + if match: + matching_list.append([user.name, same_interest]) + return matching_list + +@app.route("/", methods=["GET", "POST"]) def user_page(user_name): if not "user_name" in session: return redirect(url_for("login")) - return render_template("user_page.html") \ No newline at end of file + usr = UserData.query.filter_by(name=user_name).first() + form_msg = "" + if request.method == "POST": + param_str = request.form["param-str"] + if len(param_str) >= MAX_PARAM_LENGTH: + print("Too long text") + form_msg = "Too long text" + elif len(param_str) == 0: + print("No text") + form_msg = "No text" + else: + param_id = request.form["param-id"] + if param_id == "i1": + usr.interest1 = param_str + elif param_id == "i2": + usr.interest2 = param_str + elif param_id == "i3": + usr.interest3 = param_str + elif param_id == "usr-lang": + usr.usr_lang = param_str + elif param_id == "foreign-lang": + usr.foreign_lang = param_str + db.session.commit() + return redirect(url_for("user_page", user_name=user_name)) + return render_template("user_page.html", user_name=user_name, + interest1=usr.interest1, interest2=usr.interest2, + interest3=usr.interest3, form_msg=form_msg, + user_language=usr.usr_lang, foreign_language=usr.foreign_lang, + matching_users=get_matching_users(usr)) # not efficient \ No newline at end of file diff --git a/templates/base.html b/templates/base.html new file mode 100644 index 0000000..3387c0e --- /dev/null +++ b/templates/base.html @@ -0,0 +1,20 @@ + + + + Language Learner + + + + + +
+

Language Learner

+
+
+ {% block content %}{% endblock %} +
+
+ +
+ + \ No newline at end of file diff --git a/templates/login.html b/templates/login.html index 344e3ec..7fac740 100644 --- a/templates/login.html +++ b/templates/login.html @@ -1,33 +1,18 @@ - - - - Language Learner - - - - - -
-

Language Learner

-
-
-
-
-
-

Log in / Sign up

- - - - - -
-
-
-
-
- -
- - \ No newline at end of file +{% extends "base.html" %} +{% block content %} +
+
+ +
+

Log in / Sign up

+ + + + + +
+
+
+{% endblock %} \ No newline at end of file diff --git a/templates/user_page.html b/templates/user_page.html index 3eb800f..9ec1f0e 100644 --- a/templates/user_page.html +++ b/templates/user_page.html @@ -1,60 +1,53 @@ - - - - Language Learner - - - - - -
-

Language Learner

-
-
-
- avatar -

User Name

- Interests: -
    -
  • Football
  • -
  • Programming
  • -
  • Something
  • -
-
-
-
- - -
-
    -
  • - -
  • -
  • - -
  • -
  • - -
  • -
-
-
-
    -
  • - -
  • -
  • - -
  • -
  • - -
  • -
-
-
-
- -
- - \ No newline at end of file +{% extends "base.html" %} +{% block content %} +
+ avatar +

{{ user_name }}

+ Languages: +

{{ user_language }} -> {{ foreign_language }}

+ Interests: +
    +
  • {{ interest1 }}
  • +
  • {{ interest2 }}
  • +
  • {{ interest3 }}
  • +
+
+ + +

+ + +

+

+ + +

+

+ + +

+

+ + +

+

+ + +

+
+ +
+
+
    + {% for usr in matching_users %} +
  • +

    {{ usr[0] }}

    +

    + Same interest - {{ usr[1] }} +

    +
  • + {% endfor %} +
+
+{% endblock %} \ No newline at end of file