Closed bilgehanars closed 4 months ago
teşekkürler.
IP adresi kaydı -> evet bu yapılmıyor, dileyenler hem entry hem de user üzerinden IP kaydı yapılabilir, IP'nin nasıl kullanılacağına göre.
kullancı adı slug -> evet bu da bilinen bi durum, kendi issue'si da var. şu an platform username değişikliğine izin vermiyor.
email -> bunu araştıracağım. muhtemelen bir bug fix çıkarım
kullanıcı adı full küçük harf değilse -> evet, ufak bir hata, genel olarak platformda büyük harf kullanımına izin yok.
Google'dan gelen istekler -> normal başlıklar sitemap'da da var. olağan şartlarda "olgunlaşan" başlıklar için google'nin query parametresiz olarak da sayfaları indexleyeceğini düşünüyorum. zaten bu parametrelerle içerik olmadığını google da bildiği için zamanla düz başlık sayfaları index'lenecektir çoğunlukla.
belki sol frame'da bunlar için nofollow konulabilir.
aşağıdaki dosyayı değiştirince sorunun çözülmesi lazım. emaili kayıt olurken ve oturum açarken komple küçük harf olarak kabul ediyor. model olarak güncellemek de lazım ama bu da yetebilir.
dictionary/forms/auth.py
from django import forms
from django.contrib.auth.forms import AuthenticationForm, UserCreationForm
from django.forms.widgets import SelectDateWidget
from django.utils.translation import gettext, gettext_lazy as _
from dictionary.models import AccountTerminationQueue, Author
class LoginForm(AuthenticationForm):
error_messages = {
"invalid_login": (
_(
"could not log in. make sure that you entered correct"
" combination of e-mail and password. your credentials are"
" case sensitive. make sure that you confirmed your e-mail."
)
)
}
remember_me = forms.BooleanField(required=False, label=_("remember me"))
def clean_username(self):
username = self.cleaned_data.get('username')
return username.lower() if username else None
class SignUpForm(UserCreationForm):
email = forms.EmailField(
max_length=254,
help_text=_("required. in order to complete registration, provide a valid e-mail address."),
label=_("e-mail"),
)
gender = forms.ChoiceField(choices=Author.Gender.choices, label=_("gender"))
birth_date = forms.DateField(widget=SelectDateWidget(years=range(2006, 1900, -1)), label=_("birth date"))
terms_conditions = forms.BooleanField(required=True)
class Meta:
model = Author
fields = (
"username",
"email",
"password1",
"password2",
)
labels = {"username": _("nickname")}
def clean_email(self):
email = self.cleaned_data.get('email')
return email.lower() if email else None
class ResendEmailForm(forms.Form):
email = forms.EmailField(max_length=254, label=_("the e-mail address you used to register your account"))
def clean(self):
if not self.errors:
try:
email = self.cleaned_data.get("email").lower()
author = Author.objects.get(email=email)
if author.is_active:
raise forms.ValidationError(gettext("this e-mail has already been confirmed."))
except Author.DoesNotExist as exc:
raise forms.ValidationError(gettext("no such e-mail, never heard of it.")) from exc
super().clean()
class ChangeEmailForm(forms.Form):
email1 = forms.EmailField(max_length=254, label=_("new e-mail address"))
email2 = forms.EmailField(max_length=254, label=_("new e-mail address (again)"))
password_confirm = forms.CharField(label=_("confirm your password"), strip=False, widget=forms.PasswordInput)
def clean(self):
form_data = self.cleaned_data
email1 = form_data.get("email1").lower()
email2 = form_data.get("email2").lower()
if email1 != email2:
raise forms.ValidationError(gettext("e-mails didn't match."))
if Author.objects.filter(email=email1).exists():
raise forms.ValidationError(gettext("this e-mail is already in use."))
super().clean()
class TerminateAccountForm(forms.ModelForm):
password_confirm = forms.CharField(label=_("confirm your password"), strip=False, widget=forms.PasswordInput)
class Meta:
model = AccountTerminationQueue
fields = ("state",)
Ayrıca zaten kayıtlı kullanıcıların maillerini komple küçük harfe çevirmek için de management/commands/normalize_emails.py dosyası oluşturulup db güncellenebilir
from django.core.management.base import BaseCommand
from dictionary.models import Author
class Command(BaseCommand):
help = 'Normalize email addresses to lowercase'
def handle(self, *args, **kwargs):
users = Author.objects.all()
for user in users:
user.email = user.email.lower()
user.save()
self.stdout.write(self.style.SUCCESS('Successfully normalized email addresses'))
değişiklikleri uygulayıp yeniden başlattıktan sonra
docker exec -it sozluk_backend python manage.py normalize_emails
şeklinde sonuç alınabilir
ayrıca slugları komut olarak komple kullanıcı adına eşitlemek için manage.py'de şu şekilde bir komut dosyası oluşturulabilir, bende işe yaradı:
from django.core.management.base import BaseCommand
from dictionary.models import Author
from uuslug import uuslug
class Command(BaseCommand):
help = 'Update slugs for all authors based on their usernames'
def handle(self, *args, **kwargs):
authors = Author.objects.all()
for author in authors:
author.slug = uuslug(author.username, instance=author)
author.save()
self.stdout.write(self.style.SUCCESS('Successfully updated slugs for all authors'))
slug kısmının otomatik düzenlenmesi için burayı inceleyebilirsiniz. bunu denemedim. en kısa zamanda deneyeceğim
models/author.py
class Author(AbstractUser):
# Diğer alanlar ve metodlar...
slug = models.SlugField(max_length=35, unique=True, editable=False)
def save(self, *args, **kwargs):
if not self.slug or 'username' in self.get_dirty_fields():
self.slug = uuslug(self.username, instance=self)
super().save(*args, **kwargs)
def get_dirty_fields(self):
if not self.pk:
return {}
old_instance = Author.objects.filter(pk=self.pk).first()
dirty_fields = {}
if old_instance:
for field in self._meta.fields:
field_name = field.name
old_value = getattr(old_instance, field_name)
new_value = getattr(self, field_name)
if old_value != new_value:
dirty_fields[field_name] = (old_value, new_value)
return dirty_fields
@bilgehanars
1.6.0 versiyonunda email problemi ve kullanıcı adı slug problemi çözülüyor. bildirimler için teşekkürler
IP Kaydı yok. kullancaksanız girilen entryler ile ilgili siz sorumlusunuz. / üzerinde çalışıyorum.
Kullanıcı adı değşiminde db üzerinde slug kısmı var onun da değişmesi gerekiyor. değişmiyor
email kısmı case sensitive - eğer hesabınız varsa tek bir harf büyük şekilde hesabınızın üstüne hesap açılıp hesabınız bloke olabiliyor.
kullanıcı adı full küçük harf değilse geçersiz karakter hatası veriyor / javascript ile hallettim.
?a=today ve ?a=popular şeklinde Google'dan gelen istekler boş sayfa dönütü verebiliyor. o gün orada entry yoksa, seo için çok kötü. /ufak bir javascript ile hallettim.
Bonus database yedekleme oluşturmak için bash script: