2 Temmuz 2014 Çarşamba

Kullanıcı Kaydı

Var olan bir kullanıcının adını değiştirdik. Peki ya kullanıcı kaydı nasıl yaptırırız? Bazı web sitelerinde, "Üye olmadan burayı göremezsiniz.","Bu işlemi yapabilmek için üye olmalınız." bu tarz ifadeler ile karşılaşabilirsiniz. Şuan ki sistemlerin çoğunda kullanıcı kaydı yapılmaktadır. Biz de bu işlemi kendi sistemimize yapacağız. Gerçi yapmış olduğumuz sistemde bu pek mantıklı değil. Ama yine de göstermek için bunu yapalım.
Hatırlarsanız kullanıcının giriş yapabileceği bir sayfamız vardı. Bu sayfaya http://localhost:8000/accounts/login/ yazarak ulaşıyorduk. Şimdi bu sayfaya kullanıcıların kayıt olabileceği bir bağlantı ekleyelim.
Bu bağlantıyı eklemek için yapmamız gereken tek şey, login.html şablonumuza şu satırı eklemek.
 <p>Henüz kayıtlı değilseniz <a href="/kayit/">buraya tıklayarak kayıt olun.</a></p>
Bu bağlantı henüz çalışmayacak tabi ki. Çünkü henüz sayfayı oluşturmadık. Bunun için ilk önce kayıt görümünü oluşturalım. views.py ekliyoruz.
from django.contrib.auth.forms import UserCreationForm

def kayit(request):
    if request.method == "POST":
        form = UserCreationForm(request.POST)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect('/accounts/login/')
    else:
        form = UserCreationForm()
    return render_to_response('registration/register.html',
                              locals(),
                              context_instance = RequestContext(request))
Burada dikkat ettiyseniz ilk önce UserCreationForm içe aktardık. Bu formu kullanıyoruz. Eğer kullanıcı başarılı bir şekilde kayıt olduysa login sayfasına yönlendiriyoruz. Şimdi şablonu oluşturmalıyız. Bunun için daha önceden hastahane dizini içerisinde oluşturduğumuz registration dizinine şablonu oluşturuyoruz. hastahane/registration/register.html
<!DOCTYPE html>
<html>
<head>
    <title>OKUL: Kullanıcı Kayıt Formu</title>
   <link rel="stylesheet" type="text/css" href="/dosyalar/style.css" />
</head>
<body>

<h1>Kullanıcı Kaydı</h1>

    <form action="" method="post">
        {% csrf_token %}
        <table border="1">
            {{ form }}
        </table>
        <input type="submit" value="Kayıt Yap" />
    </form>

</body>
</html>
Son olarak urls.py dosyasına bağlantıyı eklemeliyiz.
url('^kayit/$','yonetim.views.kayit')
Artık her şey hazır. Giriş sayfasındaki bağlantıya tıkladığımızda aşağıdaki gibi bir sayfa ile karşılaşacağız.
Kullanıcı bu formu doldurduğunda kayıt olmuş olacaktır. Ardından giriş yapması için giriş sayfasına yönlendirilecektir.
Kendi Kayıt Formumuz
Tabi kullanıcılar kayıt olurken sadece kullanıcı adı ve şifre istenmez. Bu bilgilerin yanında genellikle isim,soyisim,e-posta gibi alanlarda istenir. Django'da kayıt formu varsayılan olarak bu şekilde sadece kullanıcı adı ve şifreden oluşmaktadır. Biz de bu yüzden Django'nun bize sağlamış olduğu formu kullanarak kendi formumuzu oluşturacağız. İlk önce formu oluşturmalıyız. Bunun için forms.py dosyasına şu kodları ekliyoruz.
yonetim/forms.py
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User

class KullaniciKayitFormu(UserCreationForm):
    class Meta:
        model = User
        fields = ('first_name','last_name','username','email')

    def clean_email(self):
        if not self.cleaned_data['email']:
            raise forms.ValidationError(u'E-posta adresi girin.')

        if User.objects.filter(email__iexact=self.cleaned_data['email']):
            raise forms.ValidationError(
                u'''
                Bu e-posta başka bir kullanıcı tarafından kullanılıyor.
                Başka bir e-posta kullanmayı deneyin.
                '''
            )
        return self.cleaned_data['email']
Kayıt formu oluştururken model olarak Django User nesnesini kullanıyoruz. Bu form User nesnesinin tüm alanlarına sahip olacaktır. Biz bunu istemediğimiz için fields değişkeni ile istediğimiz alanları belirttik. clean_email işlevini daha önce de kullanmıştık. Girilen mail adresinin kontrolünü bu işlev ile yapıyoruz. İlk önce kullanıcı e-posta girmiş mi onu kontrol ediyor, ardından ise daha önce bu e-posta ile kayıt yapılmış mı onu kontrol ediyoruz. Formu oluşturduğumuza göre görünümü de değiştirmeliyiz. Az önce oluşturduğumuz kayit görünümünü şu şekilde değiştiriyoruz.
yonetim/views.py

def kayit(request):
    if request.method == "POST":
        form = KullaniciKayitFormu(request.POST)
        if form.is_valid():
            form.save()
            kullanici = authenticate(username=form.cleaned_data['username'],
                                     password=form.cleaned_data['password1'])
            if kullanici.is_authenticated():
                login(request,kullanici)
            return HttpResponseRedirect("/yonetim/")
    else:
        form = KullaniciKayitFormu()
    return render_to_response('registration/register.html',locals(),context_instance=RequestContext(request))

Bu görünümde öncekinden farklı olarak kullanıcıya giriş yaptırılmış ve yönetim sayfasına yönlendirilmiştir.
Daha önceden hatırlarsanız yönetim sayfasını sadece yönetici grubundan olan kullanıcıların görebilmesini sağlamıştık. Bu yüzden oluşturduğumuz kullanıcı bu sayfayı göremeyecektir. Kullanıcının sayfayı görmesini istiyorsanız yonetim görünümünden önceki şu satırı kaldırmalısınız.
@user_passes_test(yonetici_kontrol)
Artık kayıt formu aşağıdaki gibi görünecektir.
Kaynakça:
  • Mustafa Başer Django Kitabı

1 yorum :

  1. Tam aradığım bilgiydi, elinize sağlık çok teşekkürler...

    YanıtlaSil