1

Topic: how to create login page with django framework (python)

ingin membuat website dengan python? kita bermain sedikit dengan framework django

download django 1.2.1 here:
http://www.djangoproject.com/download/1.2.1/tarball/

extract & install:

tar xzvf Django-1.2.1.tar.gz
cd Django-1.2.1
sudo python setup.py install

utk check apakah lib django sudah terinstall silahkan masuk ke modus interaktif python:

Python 2.6.5 (r265:79063, Apr 16 2010, 13:09:56) 
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>> django.VERSION
(1, 2, 1, 'final', 0)
>>> 

buat project utk web pertama kita di django:

$ django-admin.py startproject voidnetwork

akan ada direktori voidnetwork pada current directory. isi direktori voidnetwork tersebut adalah sbb:

`-- voidnetwork
    |-- __init__.py
    |-- manage.py
    |-- settings.py
    `-- urls.py

untuk menjalankan server masuk ke direktori cp27 kemudian:

$ python manage.py runserver

secara default server akan listening pada IP 127.0.0.1 port 8000

Validating models...
0 errors found

Django version 1.2.1, using settings 'cp27.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

check di browser dgn URL http://127.0.0.1:8000:
[img]http://voidnetwork.org/images_ss/x.png[/img]

pada project cp27 kita akan buat aplikasi bernama 'cp27'

$ python manage.py startapp cp27

nb: cp27 akan dikenali sebagai package pada direktori kerja voidnetwork

sekarang kita develop login page:
buat url login dan url utama yg diinginkan pada file cp27/urls.py

from django.conf.urls.defaults import *

urlpatterns += patterns('cp27.views',
    url(r'^/$', 'cpmain', name='cpmain'),
    url(r'^login/$', 'cplogin', name='cplogin'),
    (r'^admin/', include(admin.site.urls)),
)

setting database dan INSTALLED_APPS pada cp27/settings.py
contoh disini kita menggunakan postgresql. lengkapi isi dari file settings.py terutama DATABASES, TEMPLATE_DIRS, dan INSTALLED_APPS

settings.py

...
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': 'voidnetwork',                      # Or path to database file if using sqlite3.
        'USER': 'postgres',                      # Not used with sqlite3.
        'PASSWORD': 'postgres',                  # Not used with sqlite3.
        'HOST': '127.0.0.1',                      # Set to empty string for localhost. Not used with sqlite3.
        'PORT': '5432',                      # Set to empty string for default. Not used with sqlite3.
    }
...
TEMPLATE_DIRS = (
    '/home/synl0rd/voidnetwork/cp27/template'
    # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
)
...
INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    # Uncomment the next line to enable the admin:
    'django.contrib.admin',
    'voidnetwork.cp27', # nama apps yg ditambah
)

masuk ke db engine menggunakan psql:

$ psql -h 127.0.0.1 -U postgres -W

command utk create database:

postgres=# CREATE DATABASE voidnetwork;

synchronize database:

$ python manage.py sql cp27
$ python manage.py syncdb

output jika berhasil kurang lebih sbb:

Creating table auth_permission
Creating table auth_group_permissions
Creating table auth_group
Creating table auth_user_user_permissions
Creating table auth_user_groups
Creating table auth_user
Creating table auth_message
Creating table django_content_type
Creating table django_session
Creating table django_site
Creating table django_admin_log

You just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no): 
Would you like to create one now? (yes/no): yes
Username (Leave blank to use 'synl0rd'):   
E-mail address: root@voidnetwork.org
Password: 
Password (again): 
Superuser created successfully.
Installing index for auth.Permission model
Installing index for auth.Group_permissions model
Installing index for auth.User_user_permissions model
Installing index for auth.User_groups model
Installing index for auth.Message model
Installing index for admin.LogEntry model
No fixtures found.

pilih yes utk membuat account superuser django, kemudian isi email dan password yg anda inginkan.

setelah berhasil mari kita lihat halaman admin django dengan URL: http://127.0.0.1:8000/admin
jgn lupa utk menjalankan server.

kurang lebih tampilan admin pagenya adalah sbb:
[img]http://voidnetwork.org/images_ss/y.png[/img]
yak kita skip dlu mainan admin nya, sekarang kita bangun halaman utama dan halaman login yg kita inginkan. bagaimana membuatnya?

Kita akan membuat login page berdasarkan authentification user yg ada di django sendiri (kita tidak membuat tabel sendiri untuk user).

nb: ada beberapa cara untuk membuat login page, yg saya contohkan adalah cara paling jadul, next tutor akan saya berikan cara mudahnya menggunakan decorator login required

sebelumnya kita sudah isi absolute path utk template, di laptop gw mungkin di '/home/synl0rd/voidnetwork/cp27/template' (sesuaikan dengan kondisi direktori masing2).
pada direktori template buatlah 2 buah page html. untuk contoh ini gw asumsikan sbb:

nb: template gw buat seadanya, hias sendiri selebihnya kalo mau keren

cp27/template/index.html

<html>
<title>INDEX PAGE</title>
<body>
<h1> Welcome to Index page CP27 </h1>
<a href='logout'>logout</a>
</body>
</html>

cp27/template/login.html

<html>
<title>LOGIN PAGE</title>
<body>
<form action="" method="post">
    <label for="username">User name:</label>
        <input type="text" name="username" value="" id="username"><br>
    <label for="password">Password:</label>
        <input type="password" name="password" value="" id="password"><br>
    <input type="submit" value="login" />
</form>
{% if staff_stat %}
    <blink>Sorry u are not staff</blink>
{% else %}
{% endif %}

{% if errors %}
    <blink>Sorry, that's not a valid username or password</blink>
{% else %}
{% endif %}

selanjutnya kita isi cp27/views.py dengan script sbb:

from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render_to_response
from django.views.decorators.csrf import csrf_exempt
from django.contrib import auth

@csrf_exempt
def cplogin(request, error=False):
    username = request.POST.get('username', '')
    password = request.POST.get('password', '')
    user = auth.authenticate(username=username, password=password)

    if user is not None and user.is_active:
        auth.login(request, user)
        return HttpResponseRedirect('/')
    elif username == '' and password == '':
        pass
    else:
        errors = True
    return render_to_response('login.html',locals())

def cplogout(request):
    auth.logout(request)
    return HttpResponseRedirect('../login')

@csrf_exempt
def cpmain(request, staff_stat = False):
    oten = request.user
    if not oten.is_authenticated():
        return HttpResponseRedirect("login")
    else:
        if oten.is_staff == False:
            auth.logout(request)
            staff_stat = True
            return render_to_response('login.html', locals())
        else:
            return render_to_response('index.html')

pada script views kita mendefinisikan 3 function:
- cpmain() = sebagai handle halaman utama
perhatikan urls.py

    url(r'^$', 'cpmain', name='cpmain'),

saya mengarahkan URL utama ke handle function cpmain(), pada function tersebut ada proses checking apakah keadaan sesi sedang autehenticated atau tidak. jika tidak redirect ke template login, jika ya tampilkan halaman index. Disitu juga sedikit sy tambahkan untuk pengecekan staff/not staff (silahkan lihat page admin untuk status tersebut)

- cplogin() = function yang dijalankan ketika URL mengarah ke http://127.0.0.1:8000/login
- cplogout() = function yang dijalankan ketika URL mengarah ke http://127.0.0.1:8000/logout

untuk screenshot mungkin tidak perlu, karena hanya halaman login biasa dan welcome page utk index (bisa lihat di template/)

nb: tutorial kali ini belum masuk ke models hanya sebatas authentification semata

kalau ada yg bingung di diskusikan saja, banyak yg mesti dijelaskan seperti templating atau tanda @csrf_exempt, dll

semoga bermanfaat, mohon maaf apabila ada kekurangan.

thnks & regards
5ynL0rd

2

Re: how to create login page with django framework (python)

thanks 5ynL0rd
sangat membantu tutorialnya smile

3

Re: how to create login page with django framework (python)

cantik sekali tutornya bro

merokok dapat menyababkan kanker, serangan jantung, impotensi dan gangguan kehamilan dan janin

4

Re: how to create login page with django framework (python)

keren kak mantap ini big_smile