fnschool 20251021.80058.842__py3-none-any.whl → 20251027.81653.841__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of fnschool might be problematic. Click here for more details.

Files changed (59) hide show
  1. fnschoo1/__init__.py +1 -1
  2. fnschoo1/canteen/forms.py +2 -2
  3. fnschoo1/canteen/migrations/0019_category_updated_at_ingredient_created_at_and_more.py +48 -0
  4. fnschoo1/canteen/migrations/0020_alter_ingredient_created_at.py +20 -0
  5. fnschoo1/canteen/models.py +23 -3
  6. fnschoo1/canteen/templates/canteen/category/list.html +1 -1
  7. fnschoo1/canteen/templates/canteen/consumption/create.html +6 -1
  8. fnschoo1/canteen/templates/canteen/ingredient/list.html +11 -2
  9. fnschoo1/canteen/templates/canteen/meal_type/list.html +1 -1
  10. fnschoo1/fnprofile/__init__.py +0 -0
  11. fnschoo1/fnprofile/admin.py +27 -0
  12. fnschoo1/fnprofile/apps.py +12 -0
  13. fnschoo1/fnprofile/forms.py +73 -0
  14. fnschoo1/fnprofile/migrations/0001_initial.py +213 -0
  15. fnschoo1/fnprofile/migrations/0002_auto_20251026_2235.py +42 -0
  16. fnschoo1/fnprofile/migrations/0003_alter_fnuser_options.py +20 -0
  17. fnschoo1/fnprofile/migrations/__init__.py +0 -0
  18. fnschoo1/fnprofile/models.py +90 -0
  19. fnschoo1/fnprofile/signals.py +20 -0
  20. fnschoo1/fnprofile/templates/fnprofile/create.html +18 -0
  21. fnschoo1/fnprofile/templates/fnprofile/detail.html +16 -0
  22. fnschoo1/fnprofile/templates/fnprofile/edit.html +16 -0
  23. fnschoo1/fnprofile/templates/fnprofile/log_in.html +22 -0
  24. fnschoo1/fnprofile/templates/fnprofile/log_out.html +12 -0
  25. fnschoo1/fnprofile/tests.py +3 -0
  26. fnschoo1/fnprofile/urls.py +15 -0
  27. fnschoo1/fnprofile/views.py +69 -0
  28. fnschoo1/fnschool/settings.py +4 -2
  29. fnschoo1/fnschool/settings_fn_profile_migration_0001.py +180 -0
  30. fnschoo1/fnschool/urls.py +7 -2
  31. fnschoo1/locale/zh_Hans/LC_MESSAGES/django.mo +0 -0
  32. fnschoo1/profiles/__init__.py +7 -0
  33. fnschoo1/profiles/forms.py +6 -0
  34. fnschoo1/profiles/migrations/0006_profile_created_at_profile_updated_at.py +27 -0
  35. fnschoo1/profiles/migrations/0007_alter_profile_created_at.py +20 -0
  36. fnschoo1/profiles/migrations/0008_alter_profile_groups_alter_profile_user_permissions.py +38 -0
  37. fnschoo1/profiles/models.py +32 -2
  38. fnschoo1/profiles/templates/profiles/create.html +1 -1
  39. fnschoo1/profiles/templates/profiles/detail.html +1 -1
  40. fnschoo1/profiles/templates/profiles/edit.html +4 -2
  41. fnschoo1/profiles/templates/profiles/log_in.html +1 -1
  42. fnschoo1/profiles/templates/profiles/log_out.html +1 -1
  43. fnschoo1/profiles/views.py +7 -1
  44. fnschoo1/static/css/fnschool.css +14 -0
  45. fnschoo1/static/js/fnschool.js +20 -0
  46. fnschoo1/templates/home.html +1 -1
  47. fnschoo1/templates/includes/_header.html +30 -6
  48. {fnschool-20251021.80058.842.dist-info → fnschool-20251027.81653.841.dist-info}/METADATA +1 -1
  49. {fnschool-20251021.80058.842.dist-info → fnschool-20251027.81653.841.dist-info}/RECORD +59 -35
  50. /fnschoo1/templates/base/{header_content_footer.html → document.html} +0 -0
  51. {fnschool-20251021.80058.842.dist-info → fnschool-20251027.81653.841.dist-info}/SOURCES.txt.py +0 -0
  52. {fnschool-20251021.80058.842.dist-info → fnschool-20251027.81653.841.dist-info}/WHEEL +0 -0
  53. {fnschool-20251021.80058.842.dist-info → fnschool-20251027.81653.841.dist-info}/dependency_links.txt.py +0 -0
  54. {fnschool-20251021.80058.842.dist-info → fnschool-20251027.81653.841.dist-info}/entry_points.txt +0 -0
  55. {fnschool-20251021.80058.842.dist-info → fnschool-20251027.81653.841.dist-info}/entry_points.txt.py +0 -0
  56. {fnschool-20251021.80058.842.dist-info → fnschool-20251027.81653.841.dist-info}/licenses/LICENSE +0 -0
  57. {fnschool-20251021.80058.842.dist-info → fnschool-20251027.81653.841.dist-info}/requires.txt.py +0 -0
  58. {fnschool-20251021.80058.842.dist-info → fnschool-20251027.81653.841.dist-info}/top_level.txt +0 -0
  59. {fnschool-20251021.80058.842.dist-info → fnschool-20251027.81653.841.dist-info}/top_level.txt.py +0 -0
@@ -1,4 +1,10 @@
1
- from django.contrib.auth.models import AbstractUser, User
1
+ from django.contrib.auth.models import (
2
+ AbstractBaseUser,
3
+ AbstractUser,
4
+ BaseUserManager,
5
+ PermissionsMixin,
6
+ User,
7
+ )
2
8
  from django.db import models
3
9
  from django.db.models.signals import post_save
4
10
  from django.dispatch import receiver
@@ -14,7 +20,23 @@ class Gender(models.TextChoices):
14
20
  UNKNOWN = "U", "--"
15
21
 
16
22
 
17
- class Profile(AbstractUser):
23
+ class Profile(AbstractUser, PermissionsMixin):
24
+ groups = models.ManyToManyField(
25
+ "auth.Group",
26
+ verbose_name="groups",
27
+ blank=True,
28
+ help_text=_("The groups this user belongs to."),
29
+ related_name="profile_groups",
30
+ related_query_name="profile",
31
+ )
32
+ user_permissions = models.ManyToManyField(
33
+ "auth.Permission",
34
+ verbose_name="user permissions",
35
+ blank=True,
36
+ help_text=_("Specific permissions for this user."),
37
+ related_name="profile_permissions",
38
+ related_query_name="profile",
39
+ )
18
40
  phone = models.CharField(
19
41
  max_length=15, blank=True, null=True, verbose_name=_("Phone Number")
20
42
  )
@@ -49,6 +71,14 @@ class Profile(AbstractUser):
49
71
  max_length=512, blank=True, verbose_name=_("Biography")
50
72
  )
51
73
 
74
+ created_at = models.DateTimeField(
75
+ null=True, auto_now_add=True, verbose_name=_("Time of creating")
76
+ )
77
+
78
+ updated_at = models.DateTimeField(
79
+ null=True, auto_now=True, verbose_name=_("Time of updating")
80
+ )
81
+
52
82
  class Meta:
53
83
  verbose_name = _("User Profile")
54
84
  verbose_name_plural = _("User Profiles")
@@ -1,4 +1,4 @@
1
- {% extends "base/header_content_footer.html" %}
1
+ {% extends "base/document.html" %}
2
2
  {% load crispy_forms_tags %}
3
3
  {% block title %}
4
4
  {% trans "Create" %}
@@ -1,4 +1,4 @@
1
- {% extends 'base/header_content_footer.html' %}
1
+ {% extends 'base/document.html' %}
2
2
  {% block content %}
3
3
  <h1>
4
4
  {% blocktrans with user_name=profile.user.username %} Hello, {{ user_name }}!
@@ -1,11 +1,13 @@
1
- {% extends "base/header_content_footer.html" %}
1
+ {% extends "base/document.html" %}
2
2
  {% load crispy_forms_tags %}
3
3
  {% block title %}
4
4
  {% trans "Update Profile" %}
5
5
  {% endblock %}
6
6
  {% block content %}
7
7
  <h2>{% trans "Update Profile." %}</h2>
8
- <form method="post" action="{% url 'profiles:update' %}">
8
+ <form method="post"
9
+ action="{% url 'profiles:update' %}"
10
+ enctype="multipart/form-data">
9
11
  {% csrf_token %} {{ form|crispy }}
10
12
  <button type="submit button" class="btn btn-outline-primary">
11
13
  {% trans "Update" %}
@@ -1,4 +1,4 @@
1
- {% extends "base/header_content_footer.html" %}
1
+ {% extends "base/document.html" %}
2
2
  {% load crispy_forms_tags %}
3
3
  {% block title %}
4
4
  {% trans "Log in" %}
@@ -1,4 +1,4 @@
1
- {% extends "base/header_content_footer.html" %}
1
+ {% extends "base/document.html" %}
2
2
  {% block title %}
3
3
  {% trans
4
4
  "Logged Out" %}
@@ -1,8 +1,10 @@
1
+ from django.contrib import messages
1
2
  from django.contrib.auth import authenticate, login, logout
2
3
  from django.contrib.auth.decorators import login_required
3
4
  from django.shortcuts import redirect, render
4
5
  from django.urls import reverse_lazy
5
6
  from django.views.generic import CreateView
7
+ from fnschool import _, count_chinese_characters
6
8
  from fnschool.settings import LOGIN_URL
7
9
 
8
10
  from .forms import ProfileForm, ProfileLoginForm
@@ -51,9 +53,13 @@ def profile_log_out(request):
51
53
  @login_required
52
54
  def profile_edit(request):
53
55
  if request.method == "POST":
54
- form = ProfileForm(request.POST, instance=request.user)
56
+ form = ProfileForm(request.POST, request.FILES, instance=request.user)
57
+ print(request.FILES)
55
58
  if form.is_valid():
56
59
  form.save()
60
+ messages.success(
61
+ request, _("Profile has been updated successfully!")
62
+ )
57
63
  return redirect("home")
58
64
  else:
59
65
  form = ProfileForm(instance=request.user)
@@ -2,6 +2,20 @@
2
2
  color: #00adff;
3
3
  }
4
4
 
5
+ .avatar-img {
6
+ width: 60px;
7
+ height: 60px;
8
+ border-radius: 50%;
9
+ position: fixed;
10
+ }
11
+
12
+ .avatar-img:hover {
13
+ transform: scale(1.1);
14
+ }
15
+ .avatar-nav-link {
16
+ width: 32px;
17
+ }
18
+
5
19
  main {
6
20
  padding-top: 60px;
7
21
  padding-bottom: 120px;
@@ -1,3 +1,23 @@
1
+ $(document).ready(function () {
2
+ var messages = $('.messages')
3
+ if (messages.length) {
4
+ messages.css({
5
+ position: 'absolute',
6
+ top: $('.navbar').height(),
7
+ width: '100%',
8
+ })
9
+ setTimeout(function () {
10
+ messages.hide()
11
+ }, 25000)
12
+ }
13
+ var close_btn = $('.btn-close')
14
+ if (close_btn.length) {
15
+ close_btn.on('click', function () {
16
+ close_btn.closest('.alert').hide()
17
+ })
18
+ }
19
+ })
20
+
1
21
  function make_highlight(query, time_data) {
2
22
  var highlight_elements = $(query)
3
23
  var highlight_elements_toggled = []
@@ -1,4 +1,4 @@
1
- {% extends "base/header_content_footer.html" %}
1
+ {% extends "base/document.html" %}
2
2
  {% load static %}
3
3
  {% block title %}
4
4
  {% trans "FNSCHOOL" %}
@@ -55,23 +55,47 @@
55
55
  <a class="nav-link" href="#">{% trans "About" %}</a>
56
56
  </li>
57
57
  </ul>
58
- <div class="d-flex">
58
+ <div class="d-flex ">
59
59
  {% if request.user.is_authenticated %}
60
60
  <ul class="nav-item">
61
- <a class="nav-link" href="{% url 'profiles:update' %}">{{ request.user.username }}</a>
61
+ {% if request.user.avatar %}
62
+ <a class="nav-link avatar-nav-link"
63
+ href="{% url 'fnprofile:update' %}"
64
+ title="{{ request.user.username }}">
65
+ <img src="{{ request.user.avatar.url }}"
66
+ alt="{{ request.user.username }}"
67
+ class="avatar-img">
68
+ </a>
69
+ {% else %}
70
+ <a class="nav-link "
71
+ href="{% url 'fnprofile:update' %}"
72
+ title="{{ request.user.username }}">
73
+ {{ request.user.username }}
74
+ </a>
75
+ {% endif %}
62
76
  </ul>
63
- <ul class="nav-item">
64
- <a class="nav-link" href="{% url 'profiles:log_out' %}">{% trans "Log out" %}</a>
77
+ <ul class="nav-item ">
78
+ <a class="nav-link" href="{% url 'fnprofile:log_out' %}">{% trans "Log out" %}</a>
65
79
  </ul>
66
80
  {% else %}
67
81
  <ul class="nav-item">
68
- <a class="nav-link" href="{% url 'profiles:log_in' %}">{% trans "Login" %}</a>
82
+ <a class="nav-link" href="{% url 'fnprofile:log_in' %}">{% trans "Login" %}</a>
69
83
  </ul>
70
84
  <ul class="nav-item">
71
- <a class="nav-link" href="{% url 'profiles:create' %}">{% trans "Sign Up" %}</a>
85
+ <a class="nav-link" href="{% url 'fnprofile:create' %}">{% trans "Sign Up" %}</a>
72
86
  </ul>
73
87
  {% endif %}
74
88
  </div>
75
89
  </div>
76
90
  </div>
77
91
  </nav>
92
+ {% if messages %}
93
+ <div class="messages">
94
+ {% for message in messages %}
95
+ <div class="alert alert-{{ message.tags }}">
96
+ {{ message }}
97
+ <span class="btn-close mx-2" title="{% trans "Hide messages." %}"></span>
98
+ </div>
99
+ {% endfor %}
100
+ </div>
101
+ {% endif %}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fnschool
3
- Version: 20251021.80058.842
3
+ Version: 20251027.81653.841
4
4
  Summary: Just some school related scripts, without any ambition.
5
5
  Author-email: larryw3i <larryw3i@163.com>, Larry Wei <larryw3i@126.com>, Larry W3i <larryw3i@yeah.net>
6
6
  Maintainer-email: larryw3i <larryw3i@163.com>, Larry Wei <larryw3i@126.com>
@@ -1,10 +1,10 @@
1
- fnschoo1/__init__.py,sha256=dHNWiDkyBBmwkl32Zcrjb36MLvjsLRju0N81JXzqwI8,197
1
+ fnschoo1/__init__.py,sha256=okBXJVxN7zEzkLb9Nrc-s1XXTG5nj62Bhpl_QJL_usQ,197
2
2
  fnschoo1/manage.py,sha256=VZIol9q_Dhg81_KJ9Jfq-L5O8ubQelShkA-cZVJ1S6E,1539
3
3
  fnschoo1/canteen/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
4
  fnschoo1/canteen/admin.py,sha256=suMo4x8I3JBxAFBVIdE-5qnqZ6JAZV0FESABHOSc-vg,63
5
5
  fnschoo1/canteen/apps.py,sha256=zUjM0ZJwHW4i72vOm87QewRlvFQORQo5yb053u4YIGs,146
6
- fnschoo1/canteen/forms.py,sha256=JaN6SX9KIrJeUKRfTMf6bA0Op3mEGCc6xqUE6yWC8TU,2596
7
- fnschoo1/canteen/models.py,sha256=44GtfJbp6kiQYdcBmSXqHiW6JLLcmiRydf7DC6EToWY,6331
6
+ fnschoo1/canteen/forms.py,sha256=QtI91rbfD_4-fih4zRDK6ude6DgfT9Ye4TBUnMXJtQM,2609
7
+ fnschoo1/canteen/models.py,sha256=tapzO2qOenL3H1OaTPoCaJ6OrCERSfEBVv1igUbO2KA,6830
8
8
  fnschoo1/canteen/tests.py,sha256=mrbGGRNg5jwbTJtWWa7zSKdDyeB4vmgZCRc2nk6VY-g,60
9
9
  fnschoo1/canteen/urls.py,sha256=4GtrqC9L59c8zopfjRgqhbcvA5iPnGcAUVuM6CrKWpk,2797
10
10
  fnschoo1/canteen/views.py,sha256=4YYacxxa_regc56TqRQ_Bb-_wX3zuFIKyhGGp4QPh7M,28983
@@ -26,87 +26,111 @@ fnschoo1/canteen/migrations/0015_alter_category_options_alter_category_priority.
26
26
  fnschoo1/canteen/migrations/0016_consumption_unique_ingredient_date_of_using.py,sha256=kiNr4ISVoy99U7LuJMItJYtNyE4BPYR_jSdnKoXxWt4,520
27
27
  fnschoo1/canteen/migrations/0017_ingredient_updated_at_alter_category_created_at_and_more.py,sha256=fvbJV9uf8lUrqASwPO2EsyW3ApXkFk4zBE1vlT2UV0o,872
28
28
  fnschoo1/canteen/migrations/0018_alter_ingredient_updated_at.py,sha256=yzqmn9dORTvIbcmjOhtyon1eifY0pjExkRMD5UDgzBE,542
29
+ fnschoo1/canteen/migrations/0019_category_updated_at_ingredient_created_at_and_more.py,sha256=KHtlgxwVWPnrAq_KkOrPghI_rLB-F6Re6ho8BIAWss4,1420
30
+ fnschoo1/canteen/migrations/0020_alter_ingredient_created_at.py,sha256=yweF6XGnPzXL0X3zW6izwlU_Vo0WmpWCeCycX0QXBR8,505
29
31
  fnschoo1/canteen/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
32
  fnschoo1/canteen/templates/canteen/close.html,sha256=pLYeJmGaOEJKMUJdZmYzz_n--l28IRDQ4fXvetP_Vsc,200
31
33
  fnschoo1/canteen/templates/canteen/category/create.html,sha256=T33zbHRYUrWlLYSLAYZ14Y03Gw2tGMoYzBWUVv-I8pk,609
32
34
  fnschoo1/canteen/templates/canteen/category/delete.html,sha256=iPmGAB2r8K9DqBTp9T3ilOwsIfXWITlu-XcuJRLdeFM,1818
33
- fnschoo1/canteen/templates/canteen/category/list.html,sha256=QLO2GA13Co48Ijd0DCCN4lcMm1fgJqT2CprH5VdLZPw,2148
35
+ fnschoo1/canteen/templates/canteen/category/list.html,sha256=OnK9IIJyKx_r65gnTj3Sj3ECtpIXevUTA5FeCEvTQpw,2135
34
36
  fnschoo1/canteen/templates/canteen/category/update.html,sha256=UnCI95eqsQXfdUMdJXWUf1qNVWM9ZgsP03ayZ_Nrak8,831
35
37
  fnschoo1/canteen/templates/canteen/consumption/_create.html,sha256=tXlJcd566D9sYbsnj5KN-m0lyobT2AwwYt9oxUHbn4M,1026
36
- fnschoo1/canteen/templates/canteen/consumption/create.html,sha256=LSxyYQZfQLAekD84AQaJp_JRYge8I4IBF7DkTGLIGEI,16744
38
+ fnschoo1/canteen/templates/canteen/consumption/create.html,sha256=CfIMsERuDx6FAiTUZKs-H71q3c9ymRFuHRGEPun1-MI,16925
37
39
  fnschoo1/canteen/templates/canteen/ingredient/close.html,sha256=pLYeJmGaOEJKMUJdZmYzz_n--l28IRDQ4fXvetP_Vsc,200
38
40
  fnschoo1/canteen/templates/canteen/ingredient/create.html,sha256=i4ajPDpXBTUp08lIiwn0wZoNEohyXlX3G64zG1lmIcs,839
39
41
  fnschoo1/canteen/templates/canteen/ingredient/create_one.html,sha256=y9EAKXmyIrlp5-DxHd86l1rMtB16KuOjPMbPiLAN_ag,615
40
42
  fnschoo1/canteen/templates/canteen/ingredient/delete.html,sha256=npUtDGV7KK2jvc2AkiNlK6F2wUsKwLB5DQuBULm1pW8,1227
41
- fnschoo1/canteen/templates/canteen/ingredient/list.html,sha256=QqPvNbfQCv74jOWpgMX9I-m-Omg3HR_k51XlDFMv3YE,5900
43
+ fnschoo1/canteen/templates/canteen/ingredient/list.html,sha256=7hUO0vK7-1Y_JmXsFW_RC-3vRFwdB7Ak_Pz7xe393WI,6057
42
44
  fnschoo1/canteen/templates/canteen/ingredient/update.html,sha256=JwW8dVQ1fzvxjA32RvRSSqrYzPPaajObvy7D45gz5pc,835
43
45
  fnschoo1/canteen/templates/canteen/meal_type/create.html,sha256=OIxOcAa3Pp3OPT-Z0PRLINfZ08CO61ulNDU-YJA6EKI,612
44
46
  fnschoo1/canteen/templates/canteen/meal_type/delete.html,sha256=i9PBX3ShXU4Az62MEawAuDWM5jwOmKByywizhdvuSTI,1567
45
- fnschoo1/canteen/templates/canteen/meal_type/list.html,sha256=c5kJUE1OgpRtSrMV4wFwL_gbRSaX_XMM4Zt1JTx34_g,1907
47
+ fnschoo1/canteen/templates/canteen/meal_type/list.html,sha256=RQ2HgB1BLL1Zc_l_ieVjLwfcBQm-qLVsQaBtRqrlBr0,1894
46
48
  fnschoo1/canteen/templates/canteen/meal_type/update.html,sha256=vqqyuC1m2CnPd3KrcjA8t4hbJslT001s4XvcYpkQmO0,834
47
49
  fnschoo1/canteen/workbook/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
48
50
  fnschoo1/canteen/workbook/generate.py,sha256=wmqt5eFxmZRZdasMTsuc1AbntwOpUN4uVOtjfpM2j1k,109350
51
+ fnschoo1/fnprofile/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
52
+ fnschoo1/fnprofile/admin.py,sha256=DdBM3Haggw2GwO2rxcQ16KT-QnTun8tQ8W0iELhQv2w,519
53
+ fnschoo1/fnprofile/apps.py,sha256=cHx1hkuyEWo3ENyeWn8bdSNcvsir-dp__hl_ZjuNU0I,218
54
+ fnschoo1/fnprofile/forms.py,sha256=jJVfqFcSO1Pk9f7xsLH9-6Xwmoa-4j5-2QyfUhas_Ic,2059
55
+ fnschoo1/fnprofile/models.py,sha256=IQO32PqmLle3XNSs4efA0pzhSBcY7yBvVFWol9C7nm8,2476
56
+ fnschoo1/fnprofile/signals.py,sha256=n6PR2VdFNHUidD_k6S2xG2RHQjiguIAeK1foLRMhtbM,492
57
+ fnschoo1/fnprofile/tests.py,sha256=mrbGGRNg5jwbTJtWWa7zSKdDyeB4vmgZCRc2nk6VY-g,60
58
+ fnschoo1/fnprofile/urls.py,sha256=1vDGl43a5A1EGtpuUaqMbdAW8oa0fvx8RRVBw9Akxog,437
59
+ fnschoo1/fnprofile/views.py,sha256=3XOa5jwSqaTh_H8IEbg8GAxC3vp-0PY10tgFJX7DvU4,2206
60
+ fnschoo1/fnprofile/migrations/0001_initial.py,sha256=guAfLpQG4pGXXQHTqaEI8EMUiuCjsuheiHn-dV8iDtY,7484
61
+ fnschoo1/fnprofile/migrations/0002_auto_20251026_2235.py,sha256=kv0fO28-5NQx8nFSp39pTOm2zd5kKy8gIXisOzTrGwo,1239
62
+ fnschoo1/fnprofile/migrations/0003_alter_fnuser_options.py,sha256=TpzLYSCGMnWl1iU4LqiP0xrSHhc6epy-DfBWad1T1-I,452
63
+ fnschoo1/fnprofile/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
64
+ fnschoo1/fnprofile/templates/fnprofile/create.html,sha256=CO2zKX5Jqh2GXAyfF7AR0rzytYdczkbF6oO2ZoZG1Lo,546
65
+ fnschoo1/fnprofile/templates/fnprofile/detail.html,sha256=F0_Tv0X890kIdlgUZNT4pB3NiR9vyd_mhERxTjCUelc,595
66
+ fnschoo1/fnprofile/templates/fnprofile/edit.html,sha256=2QWupdI3dvPUUgBbx_umxpgPTT86-hFaqidoWHmmAQA,467
67
+ fnschoo1/fnprofile/templates/fnprofile/log_in.html,sha256=NhtmyuPQDlQM-IC6hnf-_sIknF5C5rrRnrwXbH0G4d4,725
68
+ fnschoo1/fnprofile/templates/fnprofile/log_out.html,sha256=siA56sam_0XEanX40H7Oa8dJZ2PaNi9Lbif_0Zq09Xo,317
49
69
  fnschoo1/fnschool/__init__.py,sha256=TmHhzykpKNMoMf6eD-EKvbvmnlzs1XGHtvD55ae1sXs,287
50
70
  fnschoo1/fnschool/_settings.py,sha256=ajz1GSNU9xYVrFEDSz6Xwg7amWQ_yvW75tQa1ZvRIWc,3
51
71
  fnschoo1/fnschool/asgi.py,sha256=kzkqosS10uBlyBX53EXcsATcvEZmac6nsPzyOHCuucE,393
52
- fnschoo1/fnschool/settings.py,sha256=4etVUGXK6YNv7xmNi95N4serk9JEr93kG8LsL0O3r5Y,4651
53
- fnschoo1/fnschool/urls.py,sha256=8WPemtCUuStd0R9gDP70c-NRQ5k7G4ksq6dYGH6xCDM,1036
72
+ fnschoo1/fnschool/settings.py,sha256=2eHR5jTq8QjK7mjfPnfESm7WXb-3vpHuwSjYeNhX-u8,4709
73
+ fnschoo1/fnschool/settings_fn_profile_migration_0001.py,sha256=zQKGekBTRn2fDL7OBAC3mdLUrkXxybRcjJE2t1FmxCI,4708
74
+ fnschoo1/fnschool/urls.py,sha256=5eqHzKZLzhVt3SXpSD7aNSZ4HT-B_9nLaT83-X_aJNo,1261
54
75
  fnschoo1/fnschool/views.py,sha256=MfujMhFkRLxT-saID1xTU16v0khzIl6ceDl7_JgrgFs,152
55
76
  fnschoo1/fnschool/wsgi.py,sha256=dQq4S0vZWCz8w5R9KooJeLYTVFXvEgJRYe7NFZwVxU8,393
56
77
  fnschoo1/fnschool/templatetags/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
57
78
  fnschoo1/fnschool/templatetags/fnschool_tags.py,sha256=l5Zov4VlQKpz-69SFftP4kXyMymz-a0D5F_ss_eiFc4,568
58
79
  fnschoo1/locale/en/LC_MESSAGES/django.mo,sha256=M8AB6fmjwlEd761iFlasNWdiEYfE-2nIwBoioGtEVUo,404
59
- fnschoo1/locale/zh_Hans/LC_MESSAGES/django.mo,sha256=FgGcCau9FuxB2G_Q2mjrNGjxhlndLTyyp-6aWarsHQw,23151
60
- fnschoo1/profiles/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
80
+ fnschoo1/locale/zh_Hans/LC_MESSAGES/django.mo,sha256=avjNs-L9jVhH8JiFsgsPmyHvjIvnyc6wtb_BfXasQBs,23277
81
+ fnschoo1/profiles/__init__.py,sha256=RvsEo5qK27vkdZjPQFM5LFsIo9IH7PzkbNU6DQjrYpw,178
61
82
  fnschoo1/profiles/admin.py,sha256=93UCvdODI63KzCDfFFnKmfvCMGCp6FCG9WErE91i79Y,522
62
83
  fnschoo1/profiles/apps.py,sha256=WDu6eceFnDkBFMqquAolMZMo7XPb0ah6l2q2AruTrl4,215
63
- fnschoo1/profiles/forms.py,sha256=pTSpwU2zCXxo_UpMU_MsDEGnPDgtqZlGJWLyZuuwGrQ,1875
64
- fnschoo1/profiles/models.py,sha256=23RL4cPxOTguBwLCZu98v2y8Peo6ZJI4psDaBKFzwg8,1603
84
+ fnschoo1/profiles/forms.py,sha256=ilTUlBySQgszWpUA9ioFQUr09uXZIuKTde_e_K57Ll8,2063
85
+ fnschoo1/profiles/models.py,sha256=dSl0DA8ZlTJM3kiJcxpg-vKXWGXFjRAlK6aYPIj9l8M,2466
65
86
  fnschoo1/profiles/signals.py,sha256=u5cv6xoZ7PUrKoD6ZOVWLLKg_93w_FCgWIiC4DxJADA,486
66
87
  fnschoo1/profiles/tests.py,sha256=mrbGGRNg5jwbTJtWWa7zSKdDyeB4vmgZCRc2nk6VY-g,60
67
88
  fnschoo1/profiles/urls.py,sha256=IOQ6GaPdOB4E0J-plfqIFHkabXZwOJKyFCKS7m9uKMY,426
68
- fnschoo1/profiles/views.py,sha256=msH3WLy08K58IBeAQ7YVUN0AtNv5WLqJSgEoLP5RoPw,1962
89
+ fnschoo1/profiles/views.py,sha256=9SUJx_CL7XIQcHMiRap6XkqaFOFlDc6Pk4tZ5_FRDNw,2204
69
90
  fnschoo1/profiles/migrations/0001_initial.py,sha256=zZ7l2DxJHf7YpLBBX3ztUfCmdoRNz1O5oSrdbBOdPjI,6776
70
91
  fnschoo1/profiles/migrations/0002_alter_profile_bio.py,sha256=LD7FdqcJ747XuKfIrZpq7avfx7_uZXr_t-Obc7yntSU,444
71
92
  fnschoo1/profiles/migrations/0003_alter_profile_options_alter_profile_address_and_more.py,sha256=R8rIXtXgGgOQKaucoDz93tcrHlzq1B1_Fq5DlWHPDSw,2057
72
93
  fnschoo1/profiles/migrations/0004_profile_gender.py,sha256=n5eQwBDRcEORGM7HZOcjoY_m1pckuKbjrwk--J7-LjA,625
73
94
  fnschoo1/profiles/migrations/0005_alter_profile_gender.py,sha256=dPAoUEcwjYt6AxgBfRZTCJCnEsJgCAfx_jae32TVLD4,550
95
+ fnschoo1/profiles/migrations/0006_profile_created_at_profile_updated_at.py,sha256=7cKGa_3H7bVtoO3AJ-5yWdhwBxNZqghSRO9dhOrsuXE,705
96
+ fnschoo1/profiles/migrations/0007_alter_profile_created_at.py,sha256=9lDwP5DAnj_ucCGn2hCLGf8i7Zbf26gOErwvJJlNvkY,490
97
+ fnschoo1/profiles/migrations/0008_alter_profile_groups_alter_profile_user_permissions.py,sha256=JIEvPtvbeF3j-5knJDv1BtAb8nOIB56uKZJv3vb1QCA,1158
74
98
  fnschoo1/profiles/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
75
- fnschoo1/profiles/templates/profiles/create.html,sha256=79xUmaMxyUcBWiKdaGe4T44TzefLRkBQJJxMdqTrAEw,557
76
- fnschoo1/profiles/templates/profiles/detail.html,sha256=CKi9j6Zz-WA7mjB_s27XbuxC1uKGYPEJGlf4lpO9uTc,590
77
- fnschoo1/profiles/templates/profiles/edit.html,sha256=49afyNH7OsqEKfD9TFrDKbRZ7rFO5GUKWp1uKSwL3Zg,433
78
- fnschoo1/profiles/templates/profiles/log_in.html,sha256=9hcuxdxAUHdFBxrJTJ_X6IVwKC_Jw6mfA5Sqx9a4bZA,736
79
- fnschoo1/profiles/templates/profiles/log_out.html,sha256=RRb6K-0G1Jm4RhfY9VwftJgNwgI8jsKb_N5Gvp5XtiE,320
99
+ fnschoo1/profiles/templates/profiles/create.html,sha256=a5nh6eg0D32ufnbIXZiKn4pQWXl1x1TUZUYhlBiIhOc,544
100
+ fnschoo1/profiles/templates/profiles/detail.html,sha256=IiBEs3gnPiA2MUWlt5I9BmeFbavVSBgtzyP3jCBB7eU,577
101
+ fnschoo1/profiles/templates/profiles/edit.html,sha256=7kP4LlgwLFUnzNUJUTHs4yZfLEKK5TbBcumne2yFiCg,466
102
+ fnschoo1/profiles/templates/profiles/log_in.html,sha256=r5ah5EuuNCiQ0ou-YJClD5irQPxqxul4LLIPq-8yA1A,723
103
+ fnschoo1/profiles/templates/profiles/log_out.html,sha256=7cgmXbXR1CFnVdXn3U6BAemX_m8Vfy-8Mdn6Lsu-Zfg,307
80
104
  fnschoo1/static/css/bootstrap.min.css,sha256=eGY1FwN6FhXUvbmXraT1t_q2vcNlQa8g5xQDwg8mG6w,280591
81
- fnschoo1/static/css/fnschool.css,sha256=k71DBJi4EwUQSOPyXX6G-15m8HN_z4_Ac72Du0Zf9Co,476
105
+ fnschoo1/static/css/fnschool.css,sha256=NmePHTMyKovvucCws_hC1w9b-7r4NMta-G13PiVUeDw,649
82
106
  fnschoo1/static/images/favicon.ico,sha256=S8Tf0NsUdHnoYO0SEn-sig6YjB0atIpEtSlm7p1HxjY,5014
83
107
  fnschoo1/static/js/bootstrap.bundle.min.js,sha256=6kw84LCFc4QJzifgkle0FsvQrpt2NVRNPNjSSc9caiM,125881
84
108
  fnschoo1/static/js/bootstrap.min.js,sha256=0SHpZTHghUOz_BNedMzuH00z5lgwOSRKP_KI9G5Ogbk,88597
85
- fnschoo1/static/js/fnschool.js,sha256=O4WdKFHViJVY1Z2SIHaQWuUokajBsciK-IRR8bpUyNg,4022
109
+ fnschoo1/static/js/fnschool.js,sha256=XqcvQS0GGtQmZya4E7rZESdloDm_0QIfmAoSstSR2fc,4445
86
110
  fnschoo1/static/js/jquery.min.js,sha256=np_WnfpAmUmEO_iheFAJKf6mbm0_laW3Ns4x7kjSlt4,162505
87
111
  fnschoo1/static/js/jquery.slim.min.js,sha256=p5YkbOjgHxX3hTadKlGuDW58NvJ1ldjjokDuDQ_5yXs,129962
88
112
  fnschoo1/static/js/popper.min.js,sha256=O2xdmtEow7gq3I7-0lKjshvxHkBe0hTWrMkbX2fy0XQ,36887
89
113
  fnschoo1/templates/close.html,sha256=pLYeJmGaOEJKMUJdZmYzz_n--l28IRDQ4fXvetP_Vsc,200
90
- fnschoo1/templates/home.html,sha256=34Sc9pdUN679YQE15Yp8jXtaPAcG5lyuGfX-GYJZOUc,193
114
+ fnschoo1/templates/home.html,sha256=Z2mdqq4yY7K8booZlYrngPop_jLrejb-lBFqVVxn22I,180
91
115
  fnschoo1/templates/base/_content.html,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
92
116
  fnschoo1/templates/base/_css.html,sha256=I7We2o3BzNq4PBN72UOKAtXHkZ1Xb-eYP8N4bF3rm1w,16
93
117
  fnschoo1/templates/base/_js.html,sha256=E2mgj6LQjd37r660iG2cAIOfofwuwMC6SZ59fj6wUnA,443
94
118
  fnschoo1/templates/base/content.html,sha256=wbbZVWuZwL7EX0K6x5Ex1sYx0N2YteA0XMAdGsW_ScU,974
95
- fnschoo1/templates/base/header_content_footer.html,sha256=8HyXN5B0u2bUtAXvnTkFsUhRHNA_Y3V87KuosQoPPJ4,1134
119
+ fnschoo1/templates/base/document.html,sha256=8HyXN5B0u2bUtAXvnTkFsUhRHNA_Y3V87KuosQoPPJ4,1134
96
120
  fnschoo1/templates/includes/_footer.html,sha256=giWQqakjUWPe2Z9au-EVnKmu2dvxuLezQZXmWFEtngU,1562
97
- fnschoo1/templates/includes/_header.html,sha256=2gQnNkHo92uayqatMCrXnQ751sViR7CiBOg3hN5GBL4,2784
121
+ fnschoo1/templates/includes/_header.html,sha256=pjyq_WusbfNRTtTLXVPaOMxVGk8m9RfG5zXo4iZR8B0,3595
98
122
  fnschoo1/templates/includes/_navigation.html,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
99
123
  fnschoo1/templates/includes/_paginator.html,sha256=Q-FRCODFNlETjn2yX18IfhctRWfqEgEnIc5LcdHzKSo,1262
100
124
  fnschoo1/templates/registration/logged_out.html,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
101
125
  fnschoo1/templates/registration/login.html,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
102
- fnschool-20251021.80058.842.dist-info/licenses/LICENSE,sha256=2n6rt7r999OuXp8iOqW9we7ORaxWncIbOwN1ILRGR2g,7651
103
- fnschool-20251021.80058.842.dist-info/METADATA,sha256=mw0snxiR0XlK6FNlfs71jrp42sS-xqZQQqugQIhAfog,4752
104
- fnschool-20251021.80058.842.dist-info/SOURCES.txt.py,sha256=2LY2mshgNtxI3ICB-oBjyMYgJk2bQqeGFM5J5ay5TQs,4954
105
- fnschool-20251021.80058.842.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
106
- fnschool-20251021.80058.842.dist-info/dependency_links.txt.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
107
- fnschool-20251021.80058.842.dist-info/entry_points.txt,sha256=Ow5nChVFJY3O4TJAIE1ZydMev1MUtgRsT1b8eFP6728,54
108
- fnschool-20251021.80058.842.dist-info/entry_points.txt.py,sha256=7iOwIx_m9Y6xJt___BZHWJh27LV5hqWnUjmj77MoRys,47
109
- fnschool-20251021.80058.842.dist-info/requires.txt.py,sha256=PqRcHIQSMPUb271hacYrlSDHwB1WDZmlWUkh6RnBz_g,113
110
- fnschool-20251021.80058.842.dist-info/top_level.txt,sha256=s6ZKnNm94Q0-247a50eI7jDK98uPF6P2kC9Ovd3LUlM,9
111
- fnschool-20251021.80058.842.dist-info/top_level.txt.py,sha256=_7CbrSihm0dzBn_tTy2ass_Y2VlkVNT2eylE8mcfwHY,9
112
- fnschool-20251021.80058.842.dist-info/RECORD,,
126
+ fnschool-20251027.81653.841.dist-info/licenses/LICENSE,sha256=2n6rt7r999OuXp8iOqW9we7ORaxWncIbOwN1ILRGR2g,7651
127
+ fnschool-20251027.81653.841.dist-info/METADATA,sha256=yLl7ZpplO_pG30_hmA9EWaVhVeDHyi8YQxGi8bOZDNQ,4752
128
+ fnschool-20251027.81653.841.dist-info/SOURCES.txt.py,sha256=2LY2mshgNtxI3ICB-oBjyMYgJk2bQqeGFM5J5ay5TQs,4954
129
+ fnschool-20251027.81653.841.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
130
+ fnschool-20251027.81653.841.dist-info/dependency_links.txt.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
131
+ fnschool-20251027.81653.841.dist-info/entry_points.txt,sha256=Ow5nChVFJY3O4TJAIE1ZydMev1MUtgRsT1b8eFP6728,54
132
+ fnschool-20251027.81653.841.dist-info/entry_points.txt.py,sha256=7iOwIx_m9Y6xJt___BZHWJh27LV5hqWnUjmj77MoRys,47
133
+ fnschool-20251027.81653.841.dist-info/requires.txt.py,sha256=PqRcHIQSMPUb271hacYrlSDHwB1WDZmlWUkh6RnBz_g,113
134
+ fnschool-20251027.81653.841.dist-info/top_level.txt,sha256=s6ZKnNm94Q0-247a50eI7jDK98uPF6P2kC9Ovd3LUlM,9
135
+ fnschool-20251027.81653.841.dist-info/top_level.txt.py,sha256=_7CbrSihm0dzBn_tTy2ass_Y2VlkVNT2eylE8mcfwHY,9
136
+ fnschool-20251027.81653.841.dist-info/RECORD,,