fnschool 20251027.82134.859__py3-none-any.whl → 20251101.82236.812__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.
- fnschoo1/__init__.py +1 -1
- fnschoo1/canteen/templates/canteen/ingredient/list.html +5 -2
- fnschoo1/fnhome/admin.py +3 -0
- fnschoo1/fnhome/apps.py +6 -0
- fnschoo1/fnhome/migrations/__init__.py +0 -0
- fnschoo1/fnhome/models.py +3 -0
- fnschoo1/fnhome/templates/fnhome/home.html +7 -0
- fnschoo1/fnhome/urls.py +13 -0
- fnschoo1/fnhome/views.py +50 -0
- fnschoo1/fnprofile/views.py +6 -4
- fnschoo1/fnschool/settings.py +1 -1
- fnschoo1/fnschool/urls.py +2 -1
- fnschoo1/fnschool/views.py +2 -2
- fnschoo1/manage.py +10 -0
- fnschoo1/patches/202511012053_copy_profiles_to_fnprofile.py +67 -0
- fnschoo1/patches/202511012053_copy_profiles_to_fnprofile_data/profiles/__init__.py +0 -0
- fnschoo1/{profiles → patches/202511012053_copy_profiles_to_fnprofile_data/profiles}/apps.py +2 -4
- fnschoo1/{profiles → patches/202511012053_copy_profiles_to_fnprofile_data/profiles}/migrations/0007_alter_profile_created_at.py +1 -1
- fnschoo1/patches/202511012053_copy_profiles_to_fnprofile_data/profiles/migrations/__init__.py +0 -0
- fnschoo1/{profiles → patches/202511012053_copy_profiles_to_fnprofile_data/profiles}/models.py +0 -16
- fnschoo1/patches/202511012053_copy_profiles_to_fnprofile_data/profiles/tests.py +3 -0
- fnschoo1/patches/202511012053_copy_profiles_to_fnprofile_data/settings.py +181 -0
- fnschoo1/patches/__init__.py +4 -0
- fnschoo1/static/js/fnschool.js +11 -2
- fnschoo1/templates/includes/_header.html +5 -3
- {fnschool-20251027.82134.859.dist-info → fnschool-20251101.82236.812.dist-info}/METADATA +1 -1
- {fnschool-20251027.82134.859.dist-info → fnschool-20251101.82236.812.dist-info}/RECORD +55 -43
- fnschool-20251101.82236.812.dist-info/dependency_links.txt.py +1 -0
- fnschoo1/profiles/__init__.py +0 -7
- fnschoo1/profiles/migrations/0008_alter_profile_groups_alter_profile_user_permissions.py +0 -38
- /fnschoo1/{profiles/migrations → fnhome}/__init__.py +0 -0
- /fnschoo1/{profiles → fnhome}/tests.py +0 -0
- /fnschool-20251027.82134.859.dist-info/dependency_links.txt.py → /fnschoo1/patches/202511012053_copy_profiles_to_fnprofile_data/__init__.py +0 -0
- /fnschoo1/{profiles → patches/202511012053_copy_profiles_to_fnprofile_data/profiles}/admin.py +0 -0
- /fnschoo1/{profiles → patches/202511012053_copy_profiles_to_fnprofile_data/profiles}/forms.py +0 -0
- /fnschoo1/{profiles → patches/202511012053_copy_profiles_to_fnprofile_data/profiles}/migrations/0001_initial.py +0 -0
- /fnschoo1/{profiles → patches/202511012053_copy_profiles_to_fnprofile_data/profiles}/migrations/0002_alter_profile_bio.py +0 -0
- /fnschoo1/{profiles → patches/202511012053_copy_profiles_to_fnprofile_data/profiles}/migrations/0003_alter_profile_options_alter_profile_address_and_more.py +0 -0
- /fnschoo1/{profiles → patches/202511012053_copy_profiles_to_fnprofile_data/profiles}/migrations/0004_profile_gender.py +0 -0
- /fnschoo1/{profiles → patches/202511012053_copy_profiles_to_fnprofile_data/profiles}/migrations/0005_alter_profile_gender.py +0 -0
- /fnschoo1/{profiles → patches/202511012053_copy_profiles_to_fnprofile_data/profiles}/migrations/0006_profile_created_at_profile_updated_at.py +0 -0
- /fnschoo1/{profiles → patches/202511012053_copy_profiles_to_fnprofile_data/profiles}/signals.py +0 -0
- /fnschoo1/{profiles → patches/202511012053_copy_profiles_to_fnprofile_data/profiles}/templates/profiles/create.html +0 -0
- /fnschoo1/{profiles → patches/202511012053_copy_profiles_to_fnprofile_data/profiles}/templates/profiles/detail.html +0 -0
- /fnschoo1/{profiles → patches/202511012053_copy_profiles_to_fnprofile_data/profiles}/templates/profiles/edit.html +0 -0
- /fnschoo1/{profiles → patches/202511012053_copy_profiles_to_fnprofile_data/profiles}/templates/profiles/log_in.html +0 -0
- /fnschoo1/{profiles → patches/202511012053_copy_profiles_to_fnprofile_data/profiles}/templates/profiles/log_out.html +0 -0
- /fnschoo1/{profiles → patches/202511012053_copy_profiles_to_fnprofile_data/profiles}/urls.py +0 -0
- /fnschoo1/{profiles → patches/202511012053_copy_profiles_to_fnprofile_data/profiles}/views.py +0 -0
- {fnschool-20251027.82134.859.dist-info → fnschool-20251101.82236.812.dist-info}/SOURCES.txt.py +0 -0
- {fnschool-20251027.82134.859.dist-info → fnschool-20251101.82236.812.dist-info}/WHEEL +0 -0
- {fnschool-20251027.82134.859.dist-info → fnschool-20251101.82236.812.dist-info}/entry_points.txt +0 -0
- {fnschool-20251027.82134.859.dist-info → fnschool-20251101.82236.812.dist-info}/entry_points.txt.py +0 -0
- {fnschool-20251027.82134.859.dist-info → fnschool-20251101.82236.812.dist-info}/licenses/LICENSE +0 -0
- {fnschool-20251027.82134.859.dist-info → fnschool-20251101.82236.812.dist-info}/requires.txt.py +0 -0
- {fnschool-20251027.82134.859.dist-info → fnschool-20251101.82236.812.dist-info}/top_level.txt +0 -0
- {fnschool-20251027.82134.859.dist-info → fnschool-20251101.82236.812.dist-info}/top_level.txt.py +0 -0
fnschoo1/__init__.py
CHANGED
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
</div>
|
|
37
37
|
<hr />
|
|
38
38
|
<div class="container">
|
|
39
|
-
<div class="table-responsive-lg table-container">
|
|
39
|
+
<div class="table-responsive table-responsive-lg table-container">
|
|
40
40
|
<table class="table table-bordered table-ingredient table-striped table-hover table-condensed">
|
|
41
41
|
<thead>
|
|
42
42
|
<tr>
|
|
@@ -65,15 +65,17 @@
|
|
|
65
65
|
<div class="form-check"
|
|
66
66
|
title="{% trans 'It helps you check the ingredients.' %}">
|
|
67
67
|
<input type="checkbox"
|
|
68
|
+
style="cursor: pointer"
|
|
68
69
|
class="form-check-input"
|
|
69
70
|
id="ingredient_free_nark_{{ ingredient.id }}" />
|
|
70
71
|
<label class="form-check-label"
|
|
72
|
+
style="cursor: pointer"
|
|
71
73
|
for="ingredient_free_nark_{{ ingredient.id }}">
|
|
72
74
|
{{ forloop.counter }}
|
|
73
75
|
</label>
|
|
74
76
|
</div>
|
|
75
77
|
</th>
|
|
76
|
-
<td>{{ ingredient.storage_date }}</td>
|
|
78
|
+
<td>{{ ingredient.storage_date|date:"Y.m.d" }}</td>
|
|
77
79
|
<td>{{ ingredient.name }}</td>
|
|
78
80
|
<td>{{ ingredient.meal_type }}</td>
|
|
79
81
|
<td>{{ ingredient.category }}</td>
|
|
@@ -169,6 +171,7 @@
|
|
|
169
171
|
<style>
|
|
170
172
|
.table-container {
|
|
171
173
|
overflow: auto;
|
|
174
|
+
|
|
172
175
|
}
|
|
173
176
|
|
|
174
177
|
.table-container thead th {
|
fnschoo1/fnhome/admin.py
ADDED
fnschoo1/fnhome/apps.py
ADDED
|
File without changes
|
fnschoo1/fnhome/urls.py
ADDED
fnschoo1/fnhome/views.py
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import io
|
|
2
|
+
import re
|
|
3
|
+
from datetime import date, datetime
|
|
4
|
+
from decimal import (
|
|
5
|
+
ROUND_DOWN,
|
|
6
|
+
ROUND_FLOOR,
|
|
7
|
+
ROUND_HALF_UP,
|
|
8
|
+
Decimal,
|
|
9
|
+
getcontext,
|
|
10
|
+
localcontext,
|
|
11
|
+
)
|
|
12
|
+
from pathlib import Path
|
|
13
|
+
|
|
14
|
+
import numpy as np
|
|
15
|
+
import pandas as pd
|
|
16
|
+
from dateutil import parser as date_parser
|
|
17
|
+
from dateutil.relativedelta import relativedelta
|
|
18
|
+
from django.conf import settings
|
|
19
|
+
from django.contrib.auth.decorators import login_required
|
|
20
|
+
from django.contrib.auth.mixins import LoginRequiredMixin
|
|
21
|
+
from django.contrib.staticfiles.storage import staticfiles_storage
|
|
22
|
+
from django.core.paginator import EmptyPage, PageNotAnInteger, Paginator
|
|
23
|
+
from django.db.models import (
|
|
24
|
+
DecimalField,
|
|
25
|
+
ExpressionWrapper,
|
|
26
|
+
F,
|
|
27
|
+
IntegerField,
|
|
28
|
+
Q,
|
|
29
|
+
Sum,
|
|
30
|
+
Value,
|
|
31
|
+
)
|
|
32
|
+
from django.db.models.functions import Coalesce
|
|
33
|
+
from django.http import HttpResponse
|
|
34
|
+
from django.shortcuts import get_object_or_404, redirect, render
|
|
35
|
+
from django.urls import reverse_lazy
|
|
36
|
+
from django.utils.encoding import escape_uri_path
|
|
37
|
+
from django.views.decorators.http import require_POST
|
|
38
|
+
from django.views.generic import (
|
|
39
|
+
CreateView,
|
|
40
|
+
DeleteView,
|
|
41
|
+
DetailView,
|
|
42
|
+
ListView,
|
|
43
|
+
UpdateView,
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
# Create your views here.
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def home(request):
|
|
50
|
+
return render(request, "fnhome/home.html")
|
fnschoo1/fnprofile/views.py
CHANGED
|
@@ -22,7 +22,7 @@ def fnprofile_new(request):
|
|
|
22
22
|
user.username = form.cleaned_data["username"]
|
|
23
23
|
user.save()
|
|
24
24
|
login(request, user)
|
|
25
|
-
return redirect("home")
|
|
25
|
+
return redirect("fnhome:home")
|
|
26
26
|
else:
|
|
27
27
|
form = FnuserForm()
|
|
28
28
|
|
|
@@ -38,7 +38,9 @@ def fnprofile_log_in(request):
|
|
|
38
38
|
user = authenticate(request, username=username, password=password)
|
|
39
39
|
if user is not None:
|
|
40
40
|
login(request, user)
|
|
41
|
-
next_url = request.POST.get("next") or reverse_lazy(
|
|
41
|
+
next_url = request.POST.get("next") or reverse_lazy(
|
|
42
|
+
"fnhome:home"
|
|
43
|
+
)
|
|
42
44
|
return redirect(next_url)
|
|
43
45
|
else:
|
|
44
46
|
form = FnuserLoginForm()
|
|
@@ -47,7 +49,7 @@ def fnprofile_log_in(request):
|
|
|
47
49
|
|
|
48
50
|
def fnprofile_log_out(request):
|
|
49
51
|
logout(request)
|
|
50
|
-
return redirect("home")
|
|
52
|
+
return redirect("fnhome:home")
|
|
51
53
|
|
|
52
54
|
|
|
53
55
|
@login_required
|
|
@@ -60,7 +62,7 @@ def fnprofile_edit(request):
|
|
|
60
62
|
messages.success(
|
|
61
63
|
request, _("Your information has been updated successfully!")
|
|
62
64
|
)
|
|
63
|
-
return redirect("home")
|
|
65
|
+
return redirect("fnhome:home")
|
|
64
66
|
else:
|
|
65
67
|
form = FnuserForm(instance=request.user)
|
|
66
68
|
return render(request, "fnprofile/edit.html", {"form": form})
|
fnschoo1/fnschool/settings.py
CHANGED
|
@@ -19,7 +19,6 @@ from django.utils.translation import gettext_lazy as _
|
|
|
19
19
|
# Build paths inside the project like this: BASE_DIR / 'subdir'.
|
|
20
20
|
BASE_DIR = Path(__file__).resolve().parent.parent
|
|
21
21
|
|
|
22
|
-
|
|
23
22
|
# Quick-start development settings - unsuitable for production
|
|
24
23
|
# See https://docs.djangoproject.com/en/4.2/howto/deployment/checklist/
|
|
25
24
|
|
|
@@ -51,6 +50,7 @@ INSTALLED_APPS = [
|
|
|
51
50
|
"fnprofile",
|
|
52
51
|
# "profiles",
|
|
53
52
|
"canteen",
|
|
53
|
+
"fnhome",
|
|
54
54
|
]
|
|
55
55
|
|
|
56
56
|
CRISPY_ALLOWED_TEMPLATE_PACKS = "bootstrap5"
|
fnschoo1/fnschool/urls.py
CHANGED
|
@@ -25,7 +25,8 @@ from django.views.static import serve
|
|
|
25
25
|
from . import views
|
|
26
26
|
|
|
27
27
|
urlpatterns = [
|
|
28
|
-
path("",
|
|
28
|
+
path("", include("fnhome.urls", namespace="fnhome")),
|
|
29
|
+
path("home/", include("fnhome.urls", namespace="fnhome0")),
|
|
29
30
|
path("admin/", admin.site.urls),
|
|
30
31
|
path("i18n/", include("django.conf.urls.i18n")),
|
|
31
32
|
path("fnprofile/", include("fnprofile.urls")),
|
fnschoo1/fnschool/views.py
CHANGED
fnschoo1/manage.py
CHANGED
|
@@ -38,6 +38,16 @@ def main():
|
|
|
38
38
|
os.chdir(FNSCHOOL_PATH)
|
|
39
39
|
sys.argv[0] = "manage.py"
|
|
40
40
|
|
|
41
|
+
if "202511012053_copy_profiles_to_fnprofile" in sys.argv:
|
|
42
|
+
patche_path = (
|
|
43
|
+
FNSCHOOL_PATH
|
|
44
|
+
/ "patches"
|
|
45
|
+
/ "202511012053_copy_profiles_to_fnprofile.py"
|
|
46
|
+
)
|
|
47
|
+
patche_path = patche_path.as_posix()
|
|
48
|
+
os.system(f"python3 {patche_path} run")
|
|
49
|
+
return
|
|
50
|
+
|
|
41
51
|
if len(sys.argv) < 2:
|
|
42
52
|
local_port = "8230"
|
|
43
53
|
local_url = "http://127.0.0.1:" + local_port
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import shutil
|
|
3
|
+
import sqlite3
|
|
4
|
+
import sys
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
|
|
7
|
+
file_path = Path(__file__)
|
|
8
|
+
data_path = Path(file_path.with_suffix("").as_posix() + "_data")
|
|
9
|
+
data_name = data_path.stem
|
|
10
|
+
|
|
11
|
+
settings_temp_path = data_path / "settings.py"
|
|
12
|
+
profiles_path = data_path / "profiles"
|
|
13
|
+
|
|
14
|
+
patches_path = file_path.parent
|
|
15
|
+
fnscho1_path = patches_path.parent
|
|
16
|
+
src_path = fnscho1_path.parent
|
|
17
|
+
db_path = fnscho1_path / "db.sqlite3"
|
|
18
|
+
|
|
19
|
+
patch_name = file_path.stem
|
|
20
|
+
settings_temp_name = f"patches.{data_name}.settings"
|
|
21
|
+
|
|
22
|
+
conn = sqlite3.connect(db_path.as_posix())
|
|
23
|
+
cursor = conn.cursor()
|
|
24
|
+
cursor.execute(
|
|
25
|
+
"SELECT name FROM sqlite_master WHERE type='table' AND name=?",
|
|
26
|
+
("fnprofile_fnuser",),
|
|
27
|
+
)
|
|
28
|
+
fnprofile_fnuser_exists = cursor.fetchone() is not None
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def run():
|
|
32
|
+
if fnprofile_fnuser_exists:
|
|
33
|
+
print((f"Patch {0} had been applied successfully!").format(patch_name))
|
|
34
|
+
return
|
|
35
|
+
|
|
36
|
+
os.system(
|
|
37
|
+
("python manage.py migrate --settings {0}").format(settings_temp_name)
|
|
38
|
+
)
|
|
39
|
+
os.system(
|
|
40
|
+
("python manage.py makemigrations --settings {0}").format(
|
|
41
|
+
settings_temp_name
|
|
42
|
+
)
|
|
43
|
+
)
|
|
44
|
+
print((f"Patch {0} applied successfully!").format(patch_name))
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def rollback():
|
|
48
|
+
print((f"Patch {0} rolled back!").format(patch_name))
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def main():
|
|
52
|
+
if len(sys.argv) < 2:
|
|
53
|
+
print("Usage: python script.py <function_name>")
|
|
54
|
+
sys.exit(1)
|
|
55
|
+
|
|
56
|
+
func_name = sys.argv[1]
|
|
57
|
+
|
|
58
|
+
function_dict = {"run": run, "rollback": rollback}
|
|
59
|
+
|
|
60
|
+
if func_name in function_dict:
|
|
61
|
+
function_dict[func_name]()
|
|
62
|
+
else:
|
|
63
|
+
print(f"Error: Function '{func_name}' not found.")
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
if __name__ == "__main__":
|
|
67
|
+
main()
|
|
File without changes
|
|
@@ -3,10 +3,8 @@ from django.apps import AppConfig
|
|
|
3
3
|
|
|
4
4
|
class ProfilesConfig(AppConfig):
|
|
5
5
|
default_auto_field = "django.db.models.BigAutoField"
|
|
6
|
-
name = "profiles"
|
|
7
|
-
|
|
8
|
-
def ready(self):
|
|
9
|
-
import profiles.signals
|
|
6
|
+
# name = "profiles"
|
|
7
|
+
name = "patches.202511012053_copy_profiles_to_fnprofile_data.profiles"
|
|
10
8
|
|
|
11
9
|
|
|
12
10
|
# The end.
|
|
File without changes
|
fnschoo1/{profiles → patches/202511012053_copy_profiles_to_fnprofile_data/profiles}/models.py
RENAMED
|
@@ -21,22 +21,6 @@ class Gender(models.TextChoices):
|
|
|
21
21
|
|
|
22
22
|
|
|
23
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
|
-
)
|
|
40
24
|
phone = models.CharField(
|
|
41
25
|
max_length=15, blank=True, null=True, verbose_name=_("Phone Number")
|
|
42
26
|
)
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Django settings for fnschool project.
|
|
3
|
+
|
|
4
|
+
Generated by 'django-admin startproject' using Django 4.2.24.
|
|
5
|
+
|
|
6
|
+
For more information on this file, see
|
|
7
|
+
https://docs.djangoproject.com/en/4.2/topics/settings/
|
|
8
|
+
|
|
9
|
+
For the full list of settings and their values, see
|
|
10
|
+
https://docs.djangoproject.com/en/4.2/ref/settings/
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
import os
|
|
14
|
+
from pathlib import Path
|
|
15
|
+
|
|
16
|
+
from django.urls import reverse_lazy
|
|
17
|
+
from django.utils.translation import gettext_lazy as _
|
|
18
|
+
|
|
19
|
+
# Build paths inside the project like this: BASE_DIR / 'subdir'.
|
|
20
|
+
BASE_DIR = Path(__file__).resolve().parent.parent.parent
|
|
21
|
+
print(BASE_DIR)
|
|
22
|
+
|
|
23
|
+
# Quick-start development settings - unsuitable for production
|
|
24
|
+
# See https://docs.djangoproject.com/en/4.2/howto/deployment/checklist/
|
|
25
|
+
|
|
26
|
+
# SECURITY WARNING: keep the secret key used in production secret!
|
|
27
|
+
SECRET_KEY = (
|
|
28
|
+
"django-insecure-vt(#owf#cbx)yo$9m^=%&-heu&txuc23&a5b=a=u@=274)2!9w"
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
# SECURITY WARNING: don't run with debug turned on in production!
|
|
32
|
+
DEBUG = True
|
|
33
|
+
|
|
34
|
+
ALLOWED_HOSTS = []
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
# Application definition
|
|
38
|
+
|
|
39
|
+
INSTALLED_APPS = [
|
|
40
|
+
"django.contrib.admin",
|
|
41
|
+
"django.contrib.auth",
|
|
42
|
+
"django.contrib.contenttypes",
|
|
43
|
+
"django.contrib.sessions",
|
|
44
|
+
"django.contrib.messages",
|
|
45
|
+
"django.contrib.staticfiles",
|
|
46
|
+
# site apps.
|
|
47
|
+
"crispy_forms",
|
|
48
|
+
"crispy_bootstrap5", # For Bootstrap 5
|
|
49
|
+
# fnschool apps.
|
|
50
|
+
"fnschool",
|
|
51
|
+
"fnprofile",
|
|
52
|
+
"patches.202511012053_copy_profiles_to_fnprofile_data.profiles",
|
|
53
|
+
"canteen",
|
|
54
|
+
"fnhome",
|
|
55
|
+
]
|
|
56
|
+
|
|
57
|
+
CRISPY_ALLOWED_TEMPLATE_PACKS = "bootstrap5"
|
|
58
|
+
CRISPY_TEMPLATE_PACK = "bootstrap5"
|
|
59
|
+
|
|
60
|
+
MIDDLEWARE = [
|
|
61
|
+
"django.middleware.security.SecurityMiddleware",
|
|
62
|
+
"django.contrib.sessions.middleware.SessionMiddleware",
|
|
63
|
+
"django.middleware.locale.LocaleMiddleware",
|
|
64
|
+
"django.middleware.common.CommonMiddleware",
|
|
65
|
+
"django.middleware.csrf.CsrfViewMiddleware",
|
|
66
|
+
"django.contrib.auth.middleware.AuthenticationMiddleware",
|
|
67
|
+
"django.contrib.messages.middleware.MessageMiddleware",
|
|
68
|
+
"django.middleware.clickjacking.XFrameOptionsMiddleware",
|
|
69
|
+
]
|
|
70
|
+
|
|
71
|
+
ROOT_URLCONF = "fnschool.urls"
|
|
72
|
+
|
|
73
|
+
TEMPLATES = [
|
|
74
|
+
{
|
|
75
|
+
"BACKEND": "django.template.backends.django.DjangoTemplates",
|
|
76
|
+
"DIRS": [
|
|
77
|
+
os.path.join(BASE_DIR, "templates"),
|
|
78
|
+
],
|
|
79
|
+
"APP_DIRS": True,
|
|
80
|
+
"OPTIONS": {
|
|
81
|
+
"context_processors": [
|
|
82
|
+
"django.template.context_processors.debug",
|
|
83
|
+
"django.template.context_processors.request",
|
|
84
|
+
"django.contrib.auth.context_processors.auth",
|
|
85
|
+
"django.contrib.messages.context_processors.messages",
|
|
86
|
+
"django.template.context_processors.i18n",
|
|
87
|
+
],
|
|
88
|
+
"builtins": [
|
|
89
|
+
"django.templatetags.i18n",
|
|
90
|
+
],
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
]
|
|
94
|
+
|
|
95
|
+
WSGI_APPLICATION = "fnschool.wsgi.application"
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
# Database
|
|
99
|
+
# https://docs.djangoproject.com/en/4.2/ref/settings/#databases
|
|
100
|
+
|
|
101
|
+
DATABASES = {
|
|
102
|
+
"default": {
|
|
103
|
+
"ENGINE": "django.db.backends.sqlite3",
|
|
104
|
+
"NAME": BASE_DIR / "db.sqlite3",
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
# Password validation
|
|
110
|
+
# https://docs.djangoproject.com/en/4.2/ref/settings/#auth-password-validators
|
|
111
|
+
## AUTH_USER_MODEL = "fnprofile.Fnuser"
|
|
112
|
+
AUTH_USER_MODEL = "profiles.Profile"
|
|
113
|
+
AUTH_PASSWORD_VALIDATORS = [
|
|
114
|
+
{
|
|
115
|
+
"NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator",
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
"NAME": "django.contrib.auth.password_validation.MinimumLengthValidator",
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
"NAME": "django.contrib.auth.password_validation.CommonPasswordValidator",
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
"NAME": "django.contrib.auth.password_validation.NumericPasswordValidator",
|
|
125
|
+
},
|
|
126
|
+
]
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
# Internationalization
|
|
130
|
+
# https://docs.djangoproject.com/en/4.2/topics/i18n/
|
|
131
|
+
|
|
132
|
+
USE_TZ = True
|
|
133
|
+
TIME_ZONE = "Asia/Shanghai"
|
|
134
|
+
|
|
135
|
+
USE_I18N = True
|
|
136
|
+
USE_L10N = True
|
|
137
|
+
|
|
138
|
+
LANGUAGE_CODE = "zh-hans"
|
|
139
|
+
|
|
140
|
+
LANGUAGES = [
|
|
141
|
+
("en", _("English")),
|
|
142
|
+
("es", _("Spanish")),
|
|
143
|
+
("fr", _("French")),
|
|
144
|
+
("zh-hans", _("Simplified Chinese")),
|
|
145
|
+
]
|
|
146
|
+
LOCALE_PATHS = [
|
|
147
|
+
os.path.join(BASE_DIR, "locale"),
|
|
148
|
+
]
|
|
149
|
+
|
|
150
|
+
USE_TZ = True
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
# Static files (CSS, JavaScript, Images)
|
|
154
|
+
# https://docs.djangoproject.com/en/4.2/howto/static-files/
|
|
155
|
+
|
|
156
|
+
STATIC_URL = "/static/"
|
|
157
|
+
STATICFILES_DIRS = [
|
|
158
|
+
os.path.join(BASE_DIR, "static")
|
|
159
|
+
] # Optional: for additional static directories
|
|
160
|
+
STATIC_ROOT = os.path.join(BASE_DIR, "static_collected")
|
|
161
|
+
|
|
162
|
+
# Default primary key field type
|
|
163
|
+
# https://docs.djangoproject.com/en/4.2/ref/settings/#default-auto-field
|
|
164
|
+
|
|
165
|
+
DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"
|
|
166
|
+
|
|
167
|
+
MEDIA_URL = "/media/"
|
|
168
|
+
MEDIA_ROOT = os.path.join(BASE_DIR, "media")
|
|
169
|
+
|
|
170
|
+
LOGIN_URL = reverse_lazy("fnprofile:log_in")
|
|
171
|
+
|
|
172
|
+
_settings_path = Path(__file__).parent / "_settings.py"
|
|
173
|
+
if _settings_path.exists():
|
|
174
|
+
print(
|
|
175
|
+
('Custom configuration "{_settings_path}" has been used.').format(
|
|
176
|
+
_settings_path=_settings_path.as_posix()
|
|
177
|
+
)
|
|
178
|
+
)
|
|
179
|
+
from ._settings import *
|
|
180
|
+
|
|
181
|
+
# The end.
|
fnschoo1/static/js/fnschool.js
CHANGED
|
@@ -95,8 +95,17 @@ function open_small_window(url) {
|
|
|
95
95
|
const width = Math.round(screen.width * size_times)
|
|
96
96
|
const height = Math.round(screen.height * size_times)
|
|
97
97
|
const left = Math.round((screen.width - width) / 2)
|
|
98
|
-
const
|
|
99
|
-
|
|
98
|
+
const _top = Math.round((screen.height - height) / 2)
|
|
99
|
+
|
|
100
|
+
const left0 = Math.round((screen.width - height) / 2)
|
|
101
|
+
const _top0 = Math.round((screen.height - width) / 2)
|
|
102
|
+
|
|
103
|
+
var _width_ = width
|
|
104
|
+
var _height_ = height
|
|
105
|
+
var _left_ = left
|
|
106
|
+
var _top_ = _top
|
|
107
|
+
|
|
108
|
+
const windowFeatures = `width=${_width_},height=${_height_},left=${_left_},top=${_top_},resizable=yes,scrollbars=yes`
|
|
100
109
|
window.open(url, '_blank', windowFeatures)
|
|
101
110
|
}
|
|
102
111
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
{% load i18n %}
|
|
3
3
|
<nav class="navbar navbar-expand-lg navbar-dark bg-dark text-white fixed-top">
|
|
4
4
|
<div class="container">
|
|
5
|
-
<a class="navbar-brand" href="{% url 'home' %}">
|
|
5
|
+
<a class="navbar-brand" href="{% url 'fnhome:home' %}">
|
|
6
6
|
<img src="{% static '/images/favicon.ico' %}"
|
|
7
7
|
alt="Logo"
|
|
8
8
|
width="30"
|
|
@@ -21,7 +21,9 @@
|
|
|
21
21
|
<div class="collapse navbar-collapse" id="navbarSupportedContent">
|
|
22
22
|
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
|
|
23
23
|
<li class="nav-item">
|
|
24
|
-
<a class="nav-link active"
|
|
24
|
+
<a class="nav-link active"
|
|
25
|
+
aria-current="page"
|
|
26
|
+
href="{% url 'fnhome:home' %}">{% trans "Home" %}</a>
|
|
25
27
|
</li>
|
|
26
28
|
<li class="nav-item">
|
|
27
29
|
<a class="nav-link" href="{% url 'canteen:list_ingredients' %}">{% trans "Canteen" %}</a>
|
|
@@ -92,7 +94,7 @@
|
|
|
92
94
|
{% if messages %}
|
|
93
95
|
<div class="messages">
|
|
94
96
|
{% for message in messages %}
|
|
95
|
-
<div class="alert alert-{{ message.tags }} p-2">
|
|
97
|
+
<div class="alert alert-{{ message.tags }} p-2 m-0">
|
|
96
98
|
{{ message }}
|
|
97
99
|
<span class="btn-close mx-2" title="{% trans "Hide messages." %}"></span>
|
|
98
100
|
</div>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fnschool
|
|
3
|
-
Version:
|
|
3
|
+
Version: 20251101.82236.812
|
|
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,5 +1,5 @@
|
|
|
1
|
-
fnschoo1/__init__.py,sha256=
|
|
2
|
-
fnschoo1/manage.py,sha256=
|
|
1
|
+
fnschoo1/__init__.py,sha256=QXiZ_JOJ0Aj0ambnFOhIZsMzXG3SfbguoKhBDn9GNx0,197
|
|
2
|
+
fnschoo1/manage.py,sha256=0zVlx8Y8tfc0tLAz9oeWDXHG-L0sy5AkI3cX6wYBPcY,1853
|
|
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
|
|
@@ -40,7 +40,7 @@ fnschoo1/canteen/templates/canteen/ingredient/close.html,sha256=pLYeJmGaOEJKMUJd
|
|
|
40
40
|
fnschoo1/canteen/templates/canteen/ingredient/create.html,sha256=i4ajPDpXBTUp08lIiwn0wZoNEohyXlX3G64zG1lmIcs,839
|
|
41
41
|
fnschoo1/canteen/templates/canteen/ingredient/create_one.html,sha256=y9EAKXmyIrlp5-DxHd86l1rMtB16KuOjPMbPiLAN_ag,615
|
|
42
42
|
fnschoo1/canteen/templates/canteen/ingredient/delete.html,sha256=npUtDGV7KK2jvc2AkiNlK6F2wUsKwLB5DQuBULm1pW8,1227
|
|
43
|
-
fnschoo1/canteen/templates/canteen/ingredient/list.html,sha256=
|
|
43
|
+
fnschoo1/canteen/templates/canteen/ingredient/list.html,sha256=VqZv_VflBMTlGiZgyxN04sFMy8eqKsW0F_OsRkxh08o,6186
|
|
44
44
|
fnschoo1/canteen/templates/canteen/ingredient/update.html,sha256=JwW8dVQ1fzvxjA32RvRSSqrYzPPaajObvy7D45gz5pc,835
|
|
45
45
|
fnschoo1/canteen/templates/canteen/meal_type/create.html,sha256=OIxOcAa3Pp3OPT-Z0PRLINfZ08CO61ulNDU-YJA6EKI,612
|
|
46
46
|
fnschoo1/canteen/templates/canteen/meal_type/delete.html,sha256=i9PBX3ShXU4Az62MEawAuDWM5jwOmKByywizhdvuSTI,1567
|
|
@@ -48,6 +48,15 @@ fnschoo1/canteen/templates/canteen/meal_type/list.html,sha256=RQ2HgB1BLL1Zc_l_ie
|
|
|
48
48
|
fnschoo1/canteen/templates/canteen/meal_type/update.html,sha256=vqqyuC1m2CnPd3KrcjA8t4hbJslT001s4XvcYpkQmO0,834
|
|
49
49
|
fnschoo1/canteen/workbook/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
|
50
50
|
fnschoo1/canteen/workbook/generate.py,sha256=wmqt5eFxmZRZdasMTsuc1AbntwOpUN4uVOtjfpM2j1k,109350
|
|
51
|
+
fnschoo1/fnhome/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
52
|
+
fnschoo1/fnhome/admin.py,sha256=suMo4x8I3JBxAFBVIdE-5qnqZ6JAZV0FESABHOSc-vg,63
|
|
53
|
+
fnschoo1/fnhome/apps.py,sha256=5O2BYupjNlGLDUQQ7Bj8_7FmUttyq9u4LvMuVXH_C0Y,144
|
|
54
|
+
fnschoo1/fnhome/models.py,sha256=Vjc0p2XbAPgE6HyTF6vll98A4eDhA5AvaQqsc4kQ9AQ,57
|
|
55
|
+
fnschoo1/fnhome/tests.py,sha256=mrbGGRNg5jwbTJtWWa7zSKdDyeB4vmgZCRc2nk6VY-g,60
|
|
56
|
+
fnschoo1/fnhome/urls.py,sha256=Ba6QvsfD1R6X_Bl2nyvFjBitMwSVqyoKQstINBCH2JI,223
|
|
57
|
+
fnschoo1/fnhome/views.py,sha256=c3BTHRNIX3sZWr3zzcmAMPtZmLjthEoQabN9QsJbTUw,1252
|
|
58
|
+
fnschoo1/fnhome/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
59
|
+
fnschoo1/fnhome/templates/fnhome/home.html,sha256=qB1wliqu0QlBWFmXEOkCNTXn3QeCyWpbaspdrFs7hzo,175
|
|
51
60
|
fnschoo1/fnprofile/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
52
61
|
fnschoo1/fnprofile/admin.py,sha256=DdBM3Haggw2GwO2rxcQ16KT-QnTun8tQ8W0iELhQv2w,519
|
|
53
62
|
fnschoo1/fnprofile/apps.py,sha256=cHx1hkuyEWo3ENyeWn8bdSNcvsir-dp__hl_ZjuNU0I,218
|
|
@@ -56,7 +65,7 @@ fnschoo1/fnprofile/models.py,sha256=IQO32PqmLle3XNSs4efA0pzhSBcY7yBvVFWol9C7nm8,
|
|
|
56
65
|
fnschoo1/fnprofile/signals.py,sha256=n6PR2VdFNHUidD_k6S2xG2RHQjiguIAeK1foLRMhtbM,492
|
|
57
66
|
fnschoo1/fnprofile/tests.py,sha256=mrbGGRNg5jwbTJtWWa7zSKdDyeB4vmgZCRc2nk6VY-g,60
|
|
58
67
|
fnschoo1/fnprofile/urls.py,sha256=1vDGl43a5A1EGtpuUaqMbdAW8oa0fvx8RRVBw9Akxog,437
|
|
59
|
-
fnschoo1/fnprofile/views.py,sha256=
|
|
68
|
+
fnschoo1/fnprofile/views.py,sha256=pBj4TtWGK-Wr_WNIAoZt9sjwLS5ohSrQCmcUiprgc9s,2282
|
|
60
69
|
fnschoo1/fnprofile/migrations/0001_initial.py,sha256=J7HU2Yajy9gO7w5Ox4t_e0-8tShUooMsiyjg65rjSno,7484
|
|
61
70
|
fnschoo1/fnprofile/migrations/0002_auto_20251026_2235.py,sha256=kv0fO28-5NQx8nFSp39pTOm2zd5kKy8gIXisOzTrGwo,1239
|
|
62
71
|
fnschoo1/fnprofile/migrations/0003_alter_fnuser_options_alter_fnuser_groups_and_more.py,sha256=KiV7B3XDXwPcxT10e83DTW40xaJlA2rOMuYGPzqwAPo,1362
|
|
@@ -69,43 +78,46 @@ fnschoo1/fnprofile/templates/fnprofile/log_out.html,sha256=siA56sam_0XEanX40H7Oa
|
|
|
69
78
|
fnschoo1/fnschool/__init__.py,sha256=TmHhzykpKNMoMf6eD-EKvbvmnlzs1XGHtvD55ae1sXs,287
|
|
70
79
|
fnschoo1/fnschool/_settings.py,sha256=ajz1GSNU9xYVrFEDSz6Xwg7amWQ_yvW75tQa1ZvRIWc,3
|
|
71
80
|
fnschoo1/fnschool/asgi.py,sha256=kzkqosS10uBlyBX53EXcsATcvEZmac6nsPzyOHCuucE,393
|
|
72
|
-
fnschoo1/fnschool/settings.py,sha256=
|
|
73
|
-
fnschoo1/fnschool/urls.py,sha256=
|
|
74
|
-
fnschoo1/fnschool/views.py,sha256=
|
|
81
|
+
fnschoo1/fnschool/settings.py,sha256=a9QnpTktXgoC70i6QvApSHEUxtYK--66xxLZEAj8-yc,4717
|
|
82
|
+
fnschoo1/fnschool/urls.py,sha256=lSFq0ZQSkaVWFCnsVDjZeebnIRkpBgKdjLa6hQAZzwE,1339
|
|
83
|
+
fnschoo1/fnschool/views.py,sha256=yMtB28KadYBXHxl7rtDMX7LlAV94WMt_PqmPRWpy2S4,176
|
|
75
84
|
fnschoo1/fnschool/wsgi.py,sha256=dQq4S0vZWCz8w5R9KooJeLYTVFXvEgJRYe7NFZwVxU8,393
|
|
76
85
|
fnschoo1/fnschool/templatetags/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
|
77
86
|
fnschoo1/fnschool/templatetags/fnschool_tags.py,sha256=l5Zov4VlQKpz-69SFftP4kXyMymz-a0D5F_ss_eiFc4,568
|
|
78
87
|
fnschoo1/locale/en/LC_MESSAGES/django.mo,sha256=M8AB6fmjwlEd761iFlasNWdiEYfE-2nIwBoioGtEVUo,404
|
|
79
88
|
fnschoo1/locale/zh_Hans/LC_MESSAGES/django.mo,sha256=CWhKOcM21iNxOHF8WgjAKPio1L5gVnNF4iOCmNPQZoI,23707
|
|
80
|
-
fnschoo1/
|
|
81
|
-
fnschoo1/
|
|
82
|
-
fnschoo1/
|
|
83
|
-
fnschoo1/
|
|
84
|
-
fnschoo1/profiles/
|
|
85
|
-
fnschoo1/profiles/
|
|
86
|
-
fnschoo1/profiles/
|
|
87
|
-
fnschoo1/profiles/
|
|
88
|
-
fnschoo1/profiles/
|
|
89
|
-
fnschoo1/profiles/
|
|
90
|
-
fnschoo1/profiles/
|
|
91
|
-
fnschoo1/profiles/
|
|
92
|
-
fnschoo1/profiles/
|
|
93
|
-
fnschoo1/profiles/migrations/
|
|
94
|
-
fnschoo1/profiles/migrations/
|
|
95
|
-
fnschoo1/profiles/migrations/
|
|
96
|
-
fnschoo1/profiles/migrations/
|
|
97
|
-
fnschoo1/profiles/migrations/
|
|
98
|
-
fnschoo1/
|
|
99
|
-
fnschoo1/
|
|
100
|
-
fnschoo1/
|
|
101
|
-
fnschoo1/profiles/templates/profiles/
|
|
102
|
-
fnschoo1/profiles/templates/profiles/
|
|
89
|
+
fnschoo1/patches/202511012053_copy_profiles_to_fnprofile.py,sha256=2Vyg1brUu5XX4N9FZ89jyRoq3t6YCBfzBzZ4PeAeeG4,1632
|
|
90
|
+
fnschoo1/patches/__init__.py,sha256=Zq9F_mCPtMKCrJ4r8hP3f7ZYULw6I1G8cKvEHLlxteA,61
|
|
91
|
+
fnschoo1/patches/202511012053_copy_profiles_to_fnprofile_data/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
|
92
|
+
fnschoo1/patches/202511012053_copy_profiles_to_fnprofile_data/settings.py,sha256=vCyfOPPUnYrYseULRB4fRUn-8NAFBmvglha483JqCDs,4798
|
|
93
|
+
fnschoo1/patches/202511012053_copy_profiles_to_fnprofile_data/profiles/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
94
|
+
fnschoo1/patches/202511012053_copy_profiles_to_fnprofile_data/profiles/admin.py,sha256=93UCvdODI63KzCDfFFnKmfvCMGCp6FCG9WErE91i79Y,522
|
|
95
|
+
fnschoo1/patches/202511012053_copy_profiles_to_fnprofile_data/profiles/apps.py,sha256=SJERY1f2q1xZljZZrPw1boFc3Zbv_lsSWoWUKel4-04,238
|
|
96
|
+
fnschoo1/patches/202511012053_copy_profiles_to_fnprofile_data/profiles/forms.py,sha256=ilTUlBySQgszWpUA9ioFQUr09uXZIuKTde_e_K57Ll8,2063
|
|
97
|
+
fnschoo1/patches/202511012053_copy_profiles_to_fnprofile_data/profiles/models.py,sha256=kwAzYWcg-uQ-_BaBsra32Oh4z4JXe8au9ki7qTflOm0,1933
|
|
98
|
+
fnschoo1/patches/202511012053_copy_profiles_to_fnprofile_data/profiles/signals.py,sha256=u5cv6xoZ7PUrKoD6ZOVWLLKg_93w_FCgWIiC4DxJADA,486
|
|
99
|
+
fnschoo1/patches/202511012053_copy_profiles_to_fnprofile_data/profiles/tests.py,sha256=mrbGGRNg5jwbTJtWWa7zSKdDyeB4vmgZCRc2nk6VY-g,60
|
|
100
|
+
fnschoo1/patches/202511012053_copy_profiles_to_fnprofile_data/profiles/urls.py,sha256=IOQ6GaPdOB4E0J-plfqIFHkabXZwOJKyFCKS7m9uKMY,426
|
|
101
|
+
fnschoo1/patches/202511012053_copy_profiles_to_fnprofile_data/profiles/views.py,sha256=9SUJx_CL7XIQcHMiRap6XkqaFOFlDc6Pk4tZ5_FRDNw,2204
|
|
102
|
+
fnschoo1/patches/202511012053_copy_profiles_to_fnprofile_data/profiles/migrations/0001_initial.py,sha256=zZ7l2DxJHf7YpLBBX3ztUfCmdoRNz1O5oSrdbBOdPjI,6776
|
|
103
|
+
fnschoo1/patches/202511012053_copy_profiles_to_fnprofile_data/profiles/migrations/0002_alter_profile_bio.py,sha256=LD7FdqcJ747XuKfIrZpq7avfx7_uZXr_t-Obc7yntSU,444
|
|
104
|
+
fnschoo1/patches/202511012053_copy_profiles_to_fnprofile_data/profiles/migrations/0003_alter_profile_options_alter_profile_address_and_more.py,sha256=R8rIXtXgGgOQKaucoDz93tcrHlzq1B1_Fq5DlWHPDSw,2057
|
|
105
|
+
fnschoo1/patches/202511012053_copy_profiles_to_fnprofile_data/profiles/migrations/0004_profile_gender.py,sha256=n5eQwBDRcEORGM7HZOcjoY_m1pckuKbjrwk--J7-LjA,625
|
|
106
|
+
fnschoo1/patches/202511012053_copy_profiles_to_fnprofile_data/profiles/migrations/0005_alter_profile_gender.py,sha256=dPAoUEcwjYt6AxgBfRZTCJCnEsJgCAfx_jae32TVLD4,550
|
|
107
|
+
fnschoo1/patches/202511012053_copy_profiles_to_fnprofile_data/profiles/migrations/0006_profile_created_at_profile_updated_at.py,sha256=7cKGa_3H7bVtoO3AJ-5yWdhwBxNZqghSRO9dhOrsuXE,705
|
|
108
|
+
fnschoo1/patches/202511012053_copy_profiles_to_fnprofile_data/profiles/migrations/0007_alter_profile_created_at.py,sha256=YHtCi5In5bP6vjQshbZU8EWt4AZidmdX1LhxDMoO2rA,490
|
|
109
|
+
fnschoo1/patches/202511012053_copy_profiles_to_fnprofile_data/profiles/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
110
|
+
fnschoo1/patches/202511012053_copy_profiles_to_fnprofile_data/profiles/templates/profiles/create.html,sha256=a5nh6eg0D32ufnbIXZiKn4pQWXl1x1TUZUYhlBiIhOc,544
|
|
111
|
+
fnschoo1/patches/202511012053_copy_profiles_to_fnprofile_data/profiles/templates/profiles/detail.html,sha256=IiBEs3gnPiA2MUWlt5I9BmeFbavVSBgtzyP3jCBB7eU,577
|
|
112
|
+
fnschoo1/patches/202511012053_copy_profiles_to_fnprofile_data/profiles/templates/profiles/edit.html,sha256=7kP4LlgwLFUnzNUJUTHs4yZfLEKK5TbBcumne2yFiCg,466
|
|
113
|
+
fnschoo1/patches/202511012053_copy_profiles_to_fnprofile_data/profiles/templates/profiles/log_in.html,sha256=r5ah5EuuNCiQ0ou-YJClD5irQPxqxul4LLIPq-8yA1A,723
|
|
114
|
+
fnschoo1/patches/202511012053_copy_profiles_to_fnprofile_data/profiles/templates/profiles/log_out.html,sha256=7cgmXbXR1CFnVdXn3U6BAemX_m8Vfy-8Mdn6Lsu-Zfg,307
|
|
103
115
|
fnschoo1/static/css/bootstrap.min.css,sha256=eGY1FwN6FhXUvbmXraT1t_q2vcNlQa8g5xQDwg8mG6w,280591
|
|
104
116
|
fnschoo1/static/css/fnschool.css,sha256=NmePHTMyKovvucCws_hC1w9b-7r4NMta-G13PiVUeDw,649
|
|
105
117
|
fnschoo1/static/images/favicon.ico,sha256=S8Tf0NsUdHnoYO0SEn-sig6YjB0atIpEtSlm7p1HxjY,5014
|
|
106
118
|
fnschoo1/static/js/bootstrap.bundle.min.js,sha256=6kw84LCFc4QJzifgkle0FsvQrpt2NVRNPNjSSc9caiM,125881
|
|
107
119
|
fnschoo1/static/js/bootstrap.min.js,sha256=0SHpZTHghUOz_BNedMzuH00z5lgwOSRKP_KI9G5Ogbk,88597
|
|
108
|
-
fnschoo1/static/js/fnschool.js,sha256=
|
|
120
|
+
fnschoo1/static/js/fnschool.js,sha256=IxP0-7T5G4LcOJ-00n_8M_Bx10qXF20SedxrWudEezg,4661
|
|
109
121
|
fnschoo1/static/js/jquery.min.js,sha256=np_WnfpAmUmEO_iheFAJKf6mbm0_laW3Ns4x7kjSlt4,162505
|
|
110
122
|
fnschoo1/static/js/jquery.slim.min.js,sha256=p5YkbOjgHxX3hTadKlGuDW58NvJ1ldjjokDuDQ_5yXs,129962
|
|
111
123
|
fnschoo1/static/js/popper.min.js,sha256=O2xdmtEow7gq3I7-0lKjshvxHkBe0hTWrMkbX2fy0XQ,36887
|
|
@@ -117,19 +129,19 @@ fnschoo1/templates/base/_js.html,sha256=E2mgj6LQjd37r660iG2cAIOfofwuwMC6SZ59fj6w
|
|
|
117
129
|
fnschoo1/templates/base/content.html,sha256=wbbZVWuZwL7EX0K6x5Ex1sYx0N2YteA0XMAdGsW_ScU,974
|
|
118
130
|
fnschoo1/templates/base/document.html,sha256=8HyXN5B0u2bUtAXvnTkFsUhRHNA_Y3V87KuosQoPPJ4,1134
|
|
119
131
|
fnschoo1/templates/includes/_footer.html,sha256=giWQqakjUWPe2Z9au-EVnKmu2dvxuLezQZXmWFEtngU,1562
|
|
120
|
-
fnschoo1/templates/includes/_header.html,sha256=
|
|
132
|
+
fnschoo1/templates/includes/_header.html,sha256=Mzke2KhZyJD3l3Bw8QXghvjELPZsNothhPxeISpqmxg,3643
|
|
121
133
|
fnschoo1/templates/includes/_navigation.html,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
122
134
|
fnschoo1/templates/includes/_paginator.html,sha256=Q-FRCODFNlETjn2yX18IfhctRWfqEgEnIc5LcdHzKSo,1262
|
|
123
135
|
fnschoo1/templates/registration/logged_out.html,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
124
136
|
fnschoo1/templates/registration/login.html,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
125
|
-
fnschool-
|
|
126
|
-
fnschool-
|
|
127
|
-
fnschool-
|
|
128
|
-
fnschool-
|
|
129
|
-
fnschool-
|
|
130
|
-
fnschool-
|
|
131
|
-
fnschool-
|
|
132
|
-
fnschool-
|
|
133
|
-
fnschool-
|
|
134
|
-
fnschool-
|
|
135
|
-
fnschool-
|
|
137
|
+
fnschool-20251101.82236.812.dist-info/licenses/LICENSE,sha256=2n6rt7r999OuXp8iOqW9we7ORaxWncIbOwN1ILRGR2g,7651
|
|
138
|
+
fnschool-20251101.82236.812.dist-info/METADATA,sha256=j8tl5FAu8EnKxaFptiQ2LzQBCvdcoqlCk_vOFsB9SZI,4752
|
|
139
|
+
fnschool-20251101.82236.812.dist-info/SOURCES.txt.py,sha256=2LY2mshgNtxI3ICB-oBjyMYgJk2bQqeGFM5J5ay5TQs,4954
|
|
140
|
+
fnschool-20251101.82236.812.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
141
|
+
fnschool-20251101.82236.812.dist-info/dependency_links.txt.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
|
142
|
+
fnschool-20251101.82236.812.dist-info/entry_points.txt,sha256=Ow5nChVFJY3O4TJAIE1ZydMev1MUtgRsT1b8eFP6728,54
|
|
143
|
+
fnschool-20251101.82236.812.dist-info/entry_points.txt.py,sha256=7iOwIx_m9Y6xJt___BZHWJh27LV5hqWnUjmj77MoRys,47
|
|
144
|
+
fnschool-20251101.82236.812.dist-info/requires.txt.py,sha256=PqRcHIQSMPUb271hacYrlSDHwB1WDZmlWUkh6RnBz_g,113
|
|
145
|
+
fnschool-20251101.82236.812.dist-info/top_level.txt,sha256=s6ZKnNm94Q0-247a50eI7jDK98uPF6P2kC9Ovd3LUlM,9
|
|
146
|
+
fnschool-20251101.82236.812.dist-info/top_level.txt.py,sha256=_7CbrSihm0dzBn_tTy2ass_Y2VlkVNT2eylE8mcfwHY,9
|
|
147
|
+
fnschool-20251101.82236.812.dist-info/RECORD,,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
fnschoo1/profiles/__init__.py
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
# Generated by Django 4.2.25 on 2025-10-26 14:35
|
|
2
|
-
|
|
3
|
-
from django.db import migrations, models
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
class Migration(migrations.Migration):
|
|
7
|
-
|
|
8
|
-
dependencies = [
|
|
9
|
-
("auth", "0012_alter_user_first_name_max_length"),
|
|
10
|
-
("profiles", "0007_alter_profile_created_at"),
|
|
11
|
-
]
|
|
12
|
-
|
|
13
|
-
operations = [
|
|
14
|
-
migrations.AlterField(
|
|
15
|
-
model_name="profile",
|
|
16
|
-
name="groups",
|
|
17
|
-
field=models.ManyToManyField(
|
|
18
|
-
blank=True,
|
|
19
|
-
help_text="The groups this user belongs to.",
|
|
20
|
-
related_name="profile_groups",
|
|
21
|
-
related_query_name="profile",
|
|
22
|
-
to="auth.group",
|
|
23
|
-
verbose_name="groups",
|
|
24
|
-
),
|
|
25
|
-
),
|
|
26
|
-
migrations.AlterField(
|
|
27
|
-
model_name="profile",
|
|
28
|
-
name="user_permissions",
|
|
29
|
-
field=models.ManyToManyField(
|
|
30
|
-
blank=True,
|
|
31
|
-
help_text="这个用户的特定权限。",
|
|
32
|
-
related_name="profile_permissions",
|
|
33
|
-
related_query_name="profile",
|
|
34
|
-
to="auth.permission",
|
|
35
|
-
verbose_name="user permissions",
|
|
36
|
-
),
|
|
37
|
-
),
|
|
38
|
-
]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/fnschoo1/{profiles → patches/202511012053_copy_profiles_to_fnprofile_data/profiles}/admin.py
RENAMED
|
File without changes
|
/fnschoo1/{profiles → patches/202511012053_copy_profiles_to_fnprofile_data/profiles}/forms.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/fnschoo1/{profiles → patches/202511012053_copy_profiles_to_fnprofile_data/profiles}/signals.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/fnschoo1/{profiles → patches/202511012053_copy_profiles_to_fnprofile_data/profiles}/urls.py
RENAMED
|
File without changes
|
/fnschoo1/{profiles → patches/202511012053_copy_profiles_to_fnprofile_data/profiles}/views.py
RENAMED
|
File without changes
|
{fnschool-20251027.82134.859.dist-info → fnschool-20251101.82236.812.dist-info}/SOURCES.txt.py
RENAMED
|
File without changes
|
|
File without changes
|
{fnschool-20251027.82134.859.dist-info → fnschool-20251101.82236.812.dist-info}/entry_points.txt
RENAMED
|
File without changes
|
{fnschool-20251027.82134.859.dist-info → fnschool-20251101.82236.812.dist-info}/entry_points.txt.py
RENAMED
|
File without changes
|
{fnschool-20251027.82134.859.dist-info → fnschool-20251101.82236.812.dist-info}/licenses/LICENSE
RENAMED
|
File without changes
|
{fnschool-20251027.82134.859.dist-info → fnschool-20251101.82236.812.dist-info}/requires.txt.py
RENAMED
|
File without changes
|
{fnschool-20251027.82134.859.dist-info → fnschool-20251101.82236.812.dist-info}/top_level.txt
RENAMED
|
File without changes
|
{fnschool-20251027.82134.859.dist-info → fnschool-20251101.82236.812.dist-info}/top_level.txt.py
RENAMED
|
File without changes
|