5 Commits

Author SHA1 Message Date
moscap
6869c3e6ba AUTH form were added to gui 2021-04-22 10:18:17 +03:00
moscap
d46867a03e 'nts' 2021-04-22 08:10:36 +03:00
moscap
9fd811363a Initial commit by moscap 2021-04-19 12:57:31 +03:00
f43c652671 hotfix: Исправлено добавление списков и их элементов из API 2021-04-18 12:24:12 +03:00
Aleksey Lobanov
4886e2e9be Merge pull request #20 from AlekseyLobanov/feat_4.base_api
Добавлено базовое API + finished #4 #17
2021-04-17 15:01:03 +03:00
2 changed files with 115 additions and 4 deletions

View File

@@ -5,8 +5,14 @@ from django_filters.rest_framework import DjangoFilterBackend
from .models import ToDoList, ToDoItem
class ToDoListField(serializers.PrimaryKeyRelatedField):
def get_queryset(self):
user = self.context["request"].user
return ToDoList.objects.filter(user=user)
class ToDoItemSerializer(serializers.HyperlinkedModelSerializer):
parent = serializers.PrimaryKeyRelatedField(many=False, read_only=True)
parent = ToDoListField(many=False, read_only=False, help_text="ID родительского списка")
class Meta:
model = ToDoItem
@@ -32,6 +38,12 @@ class ToDoListSerializer(serializers.HyperlinkedModelSerializer):
model = ToDoList
fields = ["id", "title", "created_at"]
def create(self, validated_data):
todo_list = ToDoList.objects.create(
user=self.context["request"].user, title=validated_data["title"]
)
return todo_list
class ToDoListViewSet(viewsets.ModelViewSet):
serializer_class = ToDoListSerializer

View File

@@ -1,14 +1,113 @@
#!/usr/bin/env python3
import sys
import tkinter as tk
from tkinter import messagebox as mb
from user import User
if 'win' in sys.platform.lower():
DEFAULT_URL = "http://localhost:8000"
else:
DEFAULT_URL = "http://0.0.0.0:8000"
BASE_W = 580
BASE_H = 400
class Application(tk.Frame):
def __init__(self, master=None):
def __init__(self,
master=None
) -> None:
"""
Функция инициаизации класса
"""
super().__init__(master)
#Иницализируем параметры окна
self.master = master
self.pack(fill=tk.BOTH, expand=1)
self.grid(row=0, column=0, sticky=tk.N + tk.S + tk.E + tk.W)
tk.Grid.rowconfigure(master, 0, weight=1)
tk.Grid.columnconfigure(master, 0, weight=1)
# Иницализируем параметры пользователя
self.user = User(url=DEFAULT_URL)
# Настраиваем размеры и включаем иницализацию
self.centerWindow()
self.initAUTH()
def centerWindow(self,
width: str = BASE_W,
heigh: str = BASE_H
) -> None:
"""
Центрирует приложение по центру экрана
:param width: ширина окна
:param heigh: высота окна
"""
sw = self.master.winfo_screenwidth()
sh = self.master.winfo_screenheight()
x = (sw - width) / 2
y = (sh - heigh) / 2
self.master.geometry('%dx%d+%d+%d' % (width, heigh, x, y))
def login_clicked(self) -> None:
"""
Функция авторизации
"""
try:
self.user.auth(self.login.get(), self.password.get())
except Exception as ex:
print(ex)
self.show_info()
def show_info(selfб,
msg: str = None
) -> None:
"""
Показывает передаваемое сообщение в messagebox
:param msg: передаваемое сообщение
"""
if msg is None:
msg = "Неправильный логин или пароль"
mb.showinfo("Информация", msg)
def initAUTH(self) -> None:
"""
Создает окно авторизации программы
"""
#Конфигурируем сетку
for rows in range(25):
tk.Grid.rowconfigure(self, rows, weight=1)
for columns in range(25):
tk.Grid.columnconfigure(self, columns, weight=1)
# Подпись и поле ввода для логина
login_label = tk.Label(self, text="Введите логин")
login_label.grid(row=9, column=12, columnspan=3, rowspan=1, sticky="nsew")
self.login = tk.Entry(self)
self.login.grid(row=10, column=12, columnspan=3, rowspan=1, sticky="nsew")
# Подпись и поле ввода для пароля
password_label = tk.Label(self, text="Введите пароль")
password_label.grid(row=11, column=12, columnspan=3, rowspan=1, sticky="nsew")
self.password = tk.Entry(self, show="*")
self.password.grid(row=12, column=12, columnspan=3, rowspan=1, sticky="nsew")
# Кнопка авториазции
btn = tk.Button(self, text="Войти", command=self.login_clicked)
btn.grid(row=14, column=12, columnspan=3, rowspan=1, sticky="nsew")
if __name__ == "__main__":
app = Application()
master = tk.Tk()
app = Application(master)
app.master.title("ToDo")
app.mainloop()