Register Form, Saving Users

Kategori: Python / Django , 23 Eylül 2019 , JanFranco


Blog projemizde kullanıcı kaydı özelliği oluşturalım. Bunun için kullanıcılar ile alakalı bir application başlatalım. Terminalden aşağıdaki komutu girelim:


python manage.py startapp user
Oluşan user klasöründe forms.py adında bir dosya açalım ve aşağıdaki şekilde düzenleyelim:


from django import forms

class RegisterForm(forms.Form):
    username = forms.CharField(max_length=30, required=True, label="Kullanıcı Adı: ")
    password = forms.CharField(max_length=30, required=True, label="Şifre: ", widget=forms.PasswordInput)
    passwordConfirm = forms.CharField(max_length=30, required=True, label="Şifreyi doğrula: ", widget=forms.PasswordInput)
    email = forms.EmailField(label="E-mail: ", required=False)

    def clean(self):
        username = self.cleaned_data.get("username")
        password = self.cleaned_data.get("password")
        passwordConfirm = self.cleaned_data.get("passwordConfirm")
        email = self.cleaned_data.get("email")

        if password and passwordConfirm and password != passwordConfirm:
            raise forms.ValidationError("Şifreler eşleşmiyor!")

        values = {
            "username": username,
            "password": password,
            "email": email
        }

        return values
Aynı klasörde urls.py adında bir dosya açalım ve içeriğini aşağıdaki şekilde düzenleyelim:


from django.urls import path
from . import views

app_name = "user"

urlpatterns = [
    path('register/', views.register, name = "register"),
    path('login/', views.loginUser, name = "login"),
    path('logout/', views.logout, name = "logout"),
]
views.py dosyasını açalım ve register() fonksiyonu oluşturalım:


from django.shortcuts import render
from . import forms
from django.contrib.auth.models import User
from django.contrib.auth import login
from django.shortcuts import redirect

def register(request):
    form = forms.RegisterForm(request.POST or None)
    if form.is_valid():
        username = form.cleaned_data.get("username")
        password = form.cleaned_data.get("password")
        email = form.cleaned_data.get("email")

        newUser = User(username = username, email = email)
        newUser.set_password(password)
        newUser.save()
        login(request, newUser)
        return redirect("index")
    
    context = {
        "form": form
    }
    return render(request, "register.html", context)
İlk olarak bir form objesi oluşturduk. Eğer /user/register linkine sadece giriliyorsa yeni GET methodu uygulanıyorsa, form doldurulmamış demektir ve valid değildir. Bu nedenle bu form objesini direk register.html dosyasına gönderiyoruz. Eğer form doldurulup, kaydol butonuna vs. tıklanmışsa yani POST methodu uygulanmışsa, formdaki bilgileri çekip, ORM aracılığıyla veritbanına kaydedip index sayfasına geri dönüyoruz. login() fonksiyonu ile otomatik giriş yapabiliriz, fonksiyonu daha sonra oluşturacağız. register.html dosyası oluşturalım:


{% extends 'layout.html' %}

{% block body %}

    <h3>Kayıt Ol</h3>
    <hr>

    <form method="post">
        {% csrf_token %}
        {{form.as_p}}
        <br>
        <button type="submit" class="btn btn-danger">Kayıt Ol</button>
    </form>

{% endblock body %}
Buradaki csrf_token komutu güvenlik amaçlıdır, Django'ya özgüdür.


Sonraki Yazı: Messages in Django
Yorumlar

Henüz bir yorum bulunmuyor.
Yorum bırakın