Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

deny demo- user, telegram phone validation, reset telgram-id, health #183

Merged
merged 12 commits into from
May 27, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion FRONTEND/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ RUN apt update -q; apt install -y poppler-utils dos2unix

# Скопіюємо інші файли в робочу директорію контейнера
COPY $APP_BASE ./
RUN dos2unix *.sh &> /dev/null
RUN dos2unix *.sh &> /dev/null
RUN dos2unix ./fastparking/*.sh &> /dev/null

# CMD bash ./run.sh
CMD [ "bash" , "./run.sh" ]
Expand Down
140 changes: 93 additions & 47 deletions FRONTEND/fastparking/accounts/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,78 +6,124 @@
from cars.models import Car
from django.contrib.auth import get_user_model
from django.contrib.auth.forms import UserChangeForm
from django.core.validators import RegexValidator

User = get_user_model()


class MyCarsForm(ModelForm):
brand = CharField(max_length=255, required=False,
widget=forms.TextInput(attrs={'placeholder': 'Brand', "class": "form-control"}))
car_type = CharField(max_length=255, required=False,
widget=forms.TextInput(attrs={'placeholder': 'Car type', "class": "form-control"}))

brand = CharField(
max_length=255,
required=False,
widget=forms.TextInput(attrs={"placeholder": "Brand", "class": "form-control"}),
)
car_type = CharField(
max_length=255,
required=False,
widget=forms.TextInput(
attrs={"placeholder": "Car type", "class": "form-control"}
),
)

class Meta:
model = MyCars
fields = ["brand", "car_type", "car_number"]
exclude = ["user", "car_number"]
exclude = ["user", "car_number"]


class CarNumberForm(ModelForm):
car_number = CharField(max_length=255,
widget=forms.TextInput(attrs={'placeholder': 'Car number', "class": "form-control"}))

car_number = CharField(
max_length=255,
widget=forms.TextInput(
attrs={"placeholder": "Car number", "class": "form-control"}
),
)

class Meta:
model = Car
fields = ["car_number"]
exclude = ["user", "photo_car", "predict", "blocked", "pay_pass"]
exclude = ["user", "photo_car", "predict", "blocked", "pay_pass"]


class EditForm(UserChangeForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields.pop('accept_oferta', None)
self.fields.pop('password', None)
self.fields.pop("accept_oferta", None)
self.fields.pop("password", None)

username = forms.CharField(
max_length=100,
required=True,
widget=forms.TextInput(attrs={"class": "form-control"}),
)
first_name = CharField(
max_length=150,
required=False,
widget=forms.TextInput(attrs={"class": "form-control"}),
)
last_name = CharField(
max_length=150,
required=False,
widget=forms.TextInput(attrs={"class": "form-control"}),
)
email = forms.EmailField(
max_length=150,
required=True,
widget=forms.EmailInput(attrs={"class": "form-control"}),
)
phone_number = forms.CharField(
min_length=11,
max_length=20,
required=False,
validators=[
RegexValidator(
regex=r"^(\+\d{10,})$",
message="Phone must start with '+' followed by digits.",
)
],
widget=forms.TextInput(
attrs={"placeholder": "+380XXXXXXXXX", "class": "form-control"}
),
)
telegram_nickname = forms.CharField(
min_length=6,
max_length=20,
required=False,
validators=[
RegexValidator(
regex=r"^(@[\w\d]{5,}|\+\d{10,})$",
message="Telegram nickname must start with '@' followed by letters or digits, or '+' followed by digits at least 10 characters.",
)
],
widget=forms.TextInput(
attrs={"placeholder": "@Nickname | +380XXXXXXXXX", "class": "form-control"}
),
)

username = forms.CharField(max_length=100, required=True,
widget=forms.TextInput(attrs={"class": "form-control"}))
first_name = CharField(max_length=150, required=False,
widget=forms.TextInput(attrs={"class": "form-control"}))
last_name = CharField(max_length=150, required=False,
widget=forms.TextInput(attrs={"class": "form-control"}))
email = forms.EmailField(max_length=150, required=True,
widget=forms.EmailInput(attrs={"class": "form-control"}))
phone_number = forms.CharField(max_length=20, required=False,
widget=forms.TextInput(attrs={'placeholder': '+380XXXXXXXXX', "class": "form-control"}))
telegram_nickname = forms.CharField(max_length=20, required=False,
widget=forms.TextInput(attrs={'placeholder': '@Nickname | +380XXXXXXXXX', "class": "form-control"}))

class Meta:
model = User
model = User
fields = (
'username',
'first_name',
'last_name',
'email',
'phone_number',
'telegram_nickname',
"username",
"first_name",
"last_name",
"email",
"phone_number",
"telegram_nickname",
)
exclude = ["accept_oferta", "telegram_id", "password1", "password2"]
exclude = ["accept_oferta", "telegram_id", "password1", "password2"]


class EditPassword(PasswordChangeForm):

class Meta:
model = User
fields = ['password1', 'password2']
model = User
fields = ["password1", "password2"]
exclude = [
'username',
'first_name',
'last_name',
'email',
'phone_number',
"username",
"first_name",
"last_name",
"email",
"phone_number",
"accept_oferta",
'telegram_nickname',
]




"telegram_nickname",
]
82 changes: 43 additions & 39 deletions FRONTEND/fastparking/accounts/views.py
Original file line number Diff line number Diff line change
@@ -1,36 +1,42 @@
from django.dispatch import receiver
from django.shortcuts import render, redirect, get_object_or_404
from django.contrib.auth.decorators import login_required
from django.contrib.auth import login
from django.urls import resolve
from django.db.models.signals import pre_save

from .models import MyCars
from cars.models import Car
from .forms import MyCarsForm, CarNumberForm, EditForm, EditPassword

from .forms import MyCarsForm, CarNumberForm, EditForm, EditPassword, User


@login_required
def profile(request):
resolved_view = resolve(request.path)
active_menu = resolved_view.app_name
return render(request, 'accounts/profile.html', {"active_menu": active_menu, "title": "User profile"})

return render(
request,
"accounts/profile.html",
{"active_menu": active_menu, "title": "User profile"},
)


@login_required
def my_cars(request):
resolved_view = resolve(request.path)
active_menu = resolved_view.app_name
my_cars = MyCars.objects.filter(user=request.user)
my_cars_number = my_cars.values_list('car_number', flat=True)
return render(request, 'accounts/my_cars.html', context={
"active_menu": active_menu,
"title": "My Cars",
"my_cars": my_cars,
"my_cars_number": my_cars_number
})


my_cars = MyCars.objects.filter(user=request.user)
my_cars_number = my_cars.values_list("car_number", flat=True)
return render(
request,
"accounts/my_cars.html",
context={
"active_menu": active_menu,
"title": "My Cars",
"my_cars": my_cars,
"my_cars_number": my_cars_number,
},
)


@login_required
Expand All @@ -45,7 +51,7 @@ def add_car(request):
car_number_form = CarNumberForm(request.POST)

if my_cars_form.is_valid() and car_number_form.is_valid():
car_number = car_number_form.cleaned_data.get('car_number')
car_number = car_number_form.cleaned_data.get("car_number")
if car_number:
car_number = car_number.strip().upper()
car_instance, created = Car.objects.get_or_create(car_number=car_number)
Expand All @@ -59,17 +65,16 @@ def add_car(request):

return render(
request,
'accounts/add_car.html',
"accounts/add_car.html",
{
"active_menu": active_menu,
"title": "Add new car",
"my_cars_form": my_cars_form,
"car_number_form": car_number_form,
}
},
)



@login_required
def delete(request, pk):
resolved_view = resolve(request.path)
Expand All @@ -85,11 +90,10 @@ def delete(request, pk):
"active_menu": active_menu,
"title": "Delete car",
"my_cars": my_cars,
"car_number": car_number
"car_number": car_number,
}

return render(request, "accounts/delete.html", context)



@login_required
Expand All @@ -105,7 +109,9 @@ def edit_car(request, pk):
if my_cars_form.is_valid() and car_number_form.is_valid():
my_cars_form.save()
car_number_instance = car_number_form.save(commit=False)
car_number_instance.car_number = car_number_instance.car_number.upper() # Переводимо в верхній регістр
car_number_instance.car_number = (
car_number_instance.car_number.upper()
) # Переводимо в верхній регістр
car_number_instance.save()
# car_number_form.save()

Expand All @@ -126,47 +132,45 @@ def edit_car(request, pk):
return render(request, "accounts/edit_car.html", context)



@login_required
def edit_profile(request):
active_menu = resolve(request.path).app_name

if request.method == 'POST':
if request.method == "POST":
user_form = EditForm(request.POST, instance=request.user)
if user_form.is_valid():
new_data = user_form.save(commit=False)
fields_to_check = ['first_name','last_name','phone_number', 'telegram_nickname']
fields_to_check = [
"first_name",
"last_name",
"phone_number",
"telegram_nickname",
]
for field in fields_to_check:
if getattr(new_data, field) == '':
if getattr(new_data, field) == "":
old_data = getattr(request.user, field)
if old_data:
old_data.delete()
new_data.save()
return redirect('accounts:profile')
new_data.save()
return redirect("accounts:profile")
else:
user_form = EditForm(instance=request.user)

context = {"active_menu": active_menu, 'user_form': user_form}
context = {"active_menu": active_menu, "user_form": user_form}
return render(request, "accounts/edit_profile.html", context)


@login_required
def password_change(request):
resolved_view = resolve(request.path)
active_menu = resolved_view.app_name
if request.method == 'POST':
if request.method == "POST":
form = EditPassword(request.user, request.POST)
if form.is_valid():
user = form.save()
login(request, user)
return redirect(to='accounts:profile')
return redirect(to="accounts:profile")
else:
form = EditPassword(request.user)
context = {"active_menu": active_menu,'form': form}
return render(request, 'accounts/password_change.html', context)







context = {"active_menu": active_menu, "form": form}
return render(request, "accounts/password_change.html", context)
Loading
Loading