Muhammad Hafid

Muhammad Hafid

Muhammad Hafid

Muhammad Hafid

Janganlah malas untuk berkarya, biarpun sederhana tetapi bermanfaat bagi orang lain. Kerjakan dengan penuh kesabaran dan keikhlasan

Undefined Datepicker di Django Admin

Error yang terkadang bikin pusing, django itu menawarkan berbagai kemudahan dalam menggunakan widget, contoh nya saja widget datepicker seperti punya saya dibawah ini :

Datepicker jenis ini asik, ada opsi Yesterday, today dan tomorrow, serta pilihan month dan yearnya juga bisa diklik maju mundur dengan berbagai model.

Tidak sampai disini, ternyata pada saat diklik salah satu tanggal yang saya pilih, yang tampil di field nya malah "undefined", Tanya kenapa ?

Prediksi saya mulai berjalan dan berfikir bertahap :
  • Periksa Timezone
  • Periksa Format Datetime
  • Fungsi Date time di django nya sendiri
Yang saya sebutkan diatas sudah saya setup di settings.py sebagai berikut :
TIME_ZONE = 'Asia/Jakarta'
es_formats.DATETIME_FORMAT = "Y-m-d H:i:s"
Menambahkan import date time dan timedelta di moduls.py dan admin.py sebagai berikut :
import datetime
from django.utils import timezone
Tetep tidak pengaruh sob. Kesaal kan sob.!!
Akhirnya saya tambahkan ini sob di bagian settings.py :
USE_I18N = True

USE_L10N = True

USE_TZ = True
Oke sekarang coba restart service django kalian dan coba lagi, apakah masih undefined ? Saya rasa berhasil. Nah jika kalian bertanya itu fungsi / parameter apa, silahkan cari di google, saya mau lanjut coding lagi bro.

Membuat View Menggunakan Data Dari Model dan Database di Django

Yup tutorial kali ini saya akan memberikan tutorial sederhana membuat view yang menampilkan data dari database, sebelumnya saya memposting mengenai cara membuat view dari render file html, nah untuk kali ini kalian sudah tidak perlu membuat file htmlnya, view langsung menampilkan data dari database, nanti mungkin selanjutnya saya akan menuliskan bagaimana cara membuat view yang datanya dari database dan tampilannya menggunakan template html.
Tutorial saya merujuk ke postingan saya yang ini ya. 
http://www.mhafid.info/2017/11/mudahnya-membuat-view-di-django.html 
Disini hanya merubah isi script views.py nya saja. Oke Tambahkan script dibawah ini :
from django.http import HttpResponse
from biodata.models import *
Lalu rubah function profilview yang sudah kita buat menjadi :
def profilview(request):
   res = ''
  
   #Filtering data
   qs = Profil.objects.filter(status = "Y")
   res += "Found : %s results<br>"%len(qs)
  
   #Ordering results
   qs = Profil.objects.order_by("id")
  
   for elt in qs:
      res += elt.name + '<br>'
  
   return HttpResponse(res)
Baris pertama res secara default kita kasih variabel kosong yang apabila ada datanya variabel ini yang akan menampung.

Lalu membuat filtering data, menampilkan data profil yang statusnya = Y, jika kalian tidak menggunakan filter hapus saja "status = 'Y'".

Selanjutnya mengurutkan data berdasarkan field id.

Lalu tampilkan datanya dengan looping (for).

Gunakan HttpResponse(variabel "Res").

Timezone Semua Negara Untuk Zona Waktu Aplikasi

Timezone ini bisa digunakan disemua aplikasi bahasa pemrograman apa saja, karena ini adalah format umum yang digunakan, baik untuk aplikasi ataupun untuk pengaturan OS / Server. Silahkan cari yang kalian inginkan :
Dibawah ini hanya tinggal copy paste perZona perbaris ya.
Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
Africa/Algiers
Africa/Asmara
Africa/Asmera
Africa/Bamako
Africa/Bangui
Africa/Banjul
Africa/Bissau
Africa/Blantyre
Africa/Brazzaville
Africa/Bujumbura
Africa/Cairo
Africa/Casablanca
Africa/Ceuta
Africa/Conakry
Africa/Dakar
Africa/Dar_es_Salaam
Africa/Djibouti
Africa/Douala
Africa/El_Aaiun
Africa/Freetown
Africa/Gaborone
Africa/Harare
Africa/Johannesburg
Africa/Juba
Africa/Kampala
Africa/Khartoum
Africa/Kigali
Africa/Kinshasa
Africa/Lagos
Africa/Libreville
Africa/Lome
Africa/Luanda
Africa/Lubumbashi
Africa/Lusaka
Africa/Malabo
Africa/Maputo
Africa/Maseru
Africa/Mbabane
Africa/Mogadishu
Africa/Monrovia
Africa/Nairobi
Africa/Ndjamena
Africa/Niamey
Africa/Nouakchott
Africa/Ouagadougou
Africa/Porto-Novo
Africa/Sao_Tome
Africa/Timbuktu
Africa/Tripoli
Africa/Tunis
Africa/Windhoek
America/Adak
America/Anchorage
America/Anguilla
America/Antigua
America/Araguaina
America/Argentina/Buenos_Aires
America/Argentina/Catamarca
America/Argentina/ComodRivadavia
America/Argentina/Cordoba
America/Argentina/Jujuy
America/Argentina/La_Rioja
America/Argentina/Mendoza
America/Argentina/Rio_Gallegos
America/Argentina/Salta
America/Argentina/San_Juan
America/Argentina/San_Luis
America/Argentina/Tucuman
America/Argentina/Ushuaia
America/Aruba
America/Asuncion
America/Atikokan
America/Atka
America/Bahia
America/Bahia_Banderas
America/Barbados
America/Belem
America/Belize
America/Blanc-Sablon
America/Boa_Vista
America/Bogota
America/Boise
America/Buenos_Aires
America/Cambridge_Bay
America/Campo_Grande
America/Cancun
America/Caracas
America/Catamarca
America/Cayenne
America/Cayman
America/Chicago
America/Chihuahua
America/Coral_Harbour
America/Cordoba
America/Costa_Rica
America/Creston
America/Cuiaba
America/Curacao
America/Danmarkshavn
America/Dawson
America/Dawson_Creek
America/Denver
America/Detroit
America/Dominica
America/Edmonton
America/Eirunepe
America/El_Salvador
America/Ensenada
America/Fort_Wayne
America/Fortaleza
America/Glace_Bay
America/Godthab
America/Goose_Bay
America/Grand_Turk
America/Grenada
America/Guadeloupe
America/Guatemala
America/Guayaquil
America/Guyana
America/Halifax
America/Havana
America/Hermosillo
America/Indiana/Indianapolis
America/Indiana/Knox
America/Indiana/Marengo
America/Indiana/Petersburg
America/Indiana/Tell_City
America/Indiana/Vevay
America/Indiana/Vincennes
America/Indiana/Winamac
America/Indianapolis
America/Inuvik
America/Iqaluit
America/Jamaica
America/Jujuy
America/Juneau
America/Kentucky/Louisville
America/Kentucky/Monticello
America/Knox_IN
America/Kralendijk
America/La_Paz
America/Lima
America/Los_Angeles
America/Louisville
America/Lower_Princes
America/Maceio
America/Managua
America/Manaus
America/Marigot
America/Martinique
America/Matamoros
America/Mazatlan
America/Mendoza
America/Menominee
America/Merida
America/Metlakatla
America/Mexico_City
America/Miquelon
America/Moncton
America/Monterrey
America/Montevideo
America/Montreal
America/Montserrat
America/Nassau
America/New_York
America/Nipigon
America/Nome
America/Noronha
America/North_Dakota/Beulah
America/North_Dakota/Center
America/North_Dakota/New_Salem
America/Ojinaga
America/Panama
America/Pangnirtung
America/Paramaribo
America/Phoenix
America/Port-au-Prince
America/Port_of_Spain
America/Porto_Acre
America/Porto_Velho
America/Puerto_Rico
America/Rainy_River
America/Rankin_Inlet
America/Recife
America/Regina
America/Resolute
America/Rio_Branco
America/Rosario
America/Santa_Isabel
America/Santarem
America/Santiago
America/Santo_Domingo
America/Sao_Paulo
America/Scoresbysund
America/Shiprock
America/Sitka
America/St_Barthelemy
America/St_Johns
America/St_Kitts
America/St_Lucia
America/St_Thomas
America/St_Vincent
America/Swift_Current
America/Tegucigalpa
America/Thule
America/Thunder_Bay
America/Tijuana
America/Toronto
America/Tortola
America/Vancouver
America/Virgin
America/Whitehorse
America/Winnipeg
America/Yakutat
America/Yellowknife
Antarctica/Casey
Antarctica/Davis
Antarctica/DumontDUrville
Antarctica/Macquarie
Antarctica/Mawson
Antarctica/McMurdo
Antarctica/Palmer
Antarctica/Rothera
Antarctica/South_Pole
Antarctica/Syowa
Antarctica/Vostok
Arctic/Longyearbyen
Asia/Aden
Asia/Almaty
Asia/Amman
Asia/Anadyr
Asia/Aqtau
Asia/Aqtobe
Asia/Ashgabat
Asia/Ashkhabad
Asia/Baghdad
Asia/Bahrain
Asia/Baku
Asia/Bangkok
Asia/Beirut
Asia/Bishkek
Asia/Brunei
Asia/Calcutta
Asia/Choibalsan
Asia/Chongqing
Asia/Chungking
Asia/Colombo
Asia/Dacca
Asia/Damascus
Asia/Dhaka
Asia/Dili
Asia/Dubai
Asia/Dushanbe
Asia/Gaza
Asia/Harbin
Asia/Hebron
Asia/Ho_Chi_Minh
Asia/Hong_Kong
Asia/Hovd
Asia/Irkutsk
Asia/Istanbul
Asia/Jakarta
Asia/Jayapura
Asia/Jerusalem
Asia/Kabul
Asia/Kamchatka
Asia/Karachi
Asia/Kashgar
Asia/Kathmandu
Asia/Katmandu
Asia/Kolkata
Asia/Krasnoyarsk
Asia/Kuala_Lumpur
Asia/Kuching
Asia/Kuwait
Asia/Macao
Asia/Macau
Asia/Magadan
Asia/Makassar
Asia/Manila
Asia/Muscat
Asia/Nicosia
Asia/Novokuznetsk
Asia/Novosibirsk
Asia/Omsk
Asia/Oral
Asia/Phnom_Penh
Asia/Pontianak
Asia/Pyongyang
Asia/Qatar
Asia/Qyzylorda
Asia/Rangoon
Asia/Riyadh
Asia/Saigon
Asia/Sakhalin
Asia/Samarkand
Asia/Seoul
Asia/Shanghai
Asia/Singapore
Asia/Taipei
Asia/Tashkent
Asia/Tbilisi
Asia/Tehran
Asia/Tel_Aviv
Asia/Thimbu
Asia/Thimphu
Asia/Tokyo
Asia/Ujung_Pandang
Asia/Ulaanbaatar
Asia/Ulan_Bator
Asia/Urumqi
Asia/Vientiane
Asia/Vladivostok
Asia/Yakutsk
Asia/Yekaterinburg
Asia/Yerevan
Atlantic/Azores
Atlantic/Bermuda
Atlantic/Canary
Atlantic/Cape_Verde
Atlantic/Faeroe
Atlantic/Faroe
Atlantic/Jan_Mayen
Atlantic/Madeira
Atlantic/Reykjavik
Atlantic/South_Georgia
Atlantic/St_Helena
Atlantic/Stanley
Australia/ACT
Australia/Adelaide
Australia/Brisbane
Australia/Broken_Hill
Australia/Canberra
Australia/Currie
Australia/Darwin
Australia/Eucla
Australia/Hobart
Australia/LHI
Australia/Lindeman
Australia/Lord_Howe
Australia/Melbourne
Australia/NSW
Australia/North
Australia/Perth
Australia/Queensland
Australia/South
Australia/Sydney
Australia/Tasmania
Australia/Victoria
Australia/West
Australia/Yancowinna
Brazil/Acre
Brazil/DeNoronha
Brazil/East
Brazil/West
CET
CST6CDT
Canada/Atlantic
Canada/Central
Canada/East-Saskatchewan
Canada/Eastern
Canada/Mountain
Canada/Newfoundland
Canada/Pacific
Canada/Saskatchewan
Canada/Yukon
Chile/Continental
Chile/EasterIsland
Cuba
EET
EST
EST5EDT
Egypt
Eire
Etc/GMT
Etc/GMT+0
Etc/GMT+1
Etc/GMT+10
Etc/GMT+11
Etc/GMT+12
Etc/GMT+2
Etc/GMT+3
Etc/GMT+4
Etc/GMT+5
Etc/GMT+6
Etc/GMT+7
Etc/GMT+8
Etc/GMT+9
Etc/GMT-0
Etc/GMT-1
Etc/GMT-10
Etc/GMT-11
Etc/GMT-12
Etc/GMT-13
Etc/GMT-14
Etc/GMT-2
Etc/GMT-3
Etc/GMT-4
Etc/GMT-5
Etc/GMT-6
Etc/GMT-7
Etc/GMT-8
Etc/GMT-9
Etc/GMT0
Etc/Greenwich
Etc/UCT
Etc/UTC
Etc/Universal
Etc/Zulu
Europe/Amsterdam
Europe/Andorra
Europe/Athens
Europe/Belfast
Europe/Belgrade
Europe/Berlin
Europe/Bratislava
Europe/Brussels
Europe/Bucharest
Europe/Budapest
Europe/Chisinau
Europe/Copenhagen
Europe/Dublin
Europe/Gibraltar
Europe/Guernsey
Europe/Helsinki
Europe/Isle_of_Man
Europe/Istanbul
Europe/Jersey
Europe/Kaliningrad
Europe/Kiev
Europe/Lisbon
Europe/Ljubljana
Europe/London
Europe/Luxembourg
Europe/Madrid
Europe/Malta
Europe/Mariehamn
Europe/Minsk
Europe/Monaco
Europe/Moscow
Europe/Nicosia
Europe/Oslo
Europe/Paris
Europe/Podgorica
Europe/Prague
Europe/Riga
Europe/Rome
Europe/Samara
Europe/San_Marino
Europe/Sarajevo
Europe/Simferopol
Europe/Skopje
Europe/Sofia
Europe/Stockholm
Europe/Tallinn
Europe/Tirane
Europe/Tiraspol
Europe/Uzhgorod
Europe/Vaduz
Europe/Vatican
Europe/Vienna
Europe/Vilnius
Europe/Volgograd
Europe/Warsaw
Europe/Zagreb
Europe/Zaporozhye
Europe/Zurich
GB
GB-Eire
GMT
GMT+0
GMT-0
GMT0
Greenwich
HST
Hongkong
Iceland
Indian/Antananarivo
Indian/Chagos
Indian/Christmas
Indian/Cocos
Indian/Comoro
Indian/Kerguelen
Indian/Mahe
Indian/Maldives
Indian/Mauritius
Indian/Mayotte
Indian/Reunion
Iran
Israel
Jamaica
Japan
Kwajalein
Libya
MET
MST
MST7MDT
Mexico/BajaNorte
Mexico/BajaSur
Mexico/General
NZ
NZ-CHAT
Navajo
PRC
PST8PDT
Pacific/Apia
Pacific/Auckland
Pacific/Chatham
Pacific/Chuuk
Pacific/Easter
Pacific/Efate
Pacific/Enderbury
Pacific/Fakaofo
Pacific/Fiji
Pacific/Funafuti
Pacific/Galapagos
Pacific/Gambier
Pacific/Guadalcanal
Pacific/Guam
Pacific/Honolulu
Pacific/Johnston
Pacific/Kiritimati
Pacific/Kosrae
Pacific/Kwajalein
Pacific/Majuro
Pacific/Marquesas
Pacific/Midway
Pacific/Nauru
Pacific/Niue
Pacific/Norfolk
Pacific/Noumea
Pacific/Pago_Pago
Pacific/Palau
Pacific/Pitcairn
Pacific/Pohnpei
Pacific/Ponape
Pacific/Port_Moresby
Pacific/Rarotonga
Pacific/Saipan
Pacific/Samoa
Pacific/Tahiti
Pacific/Tarawa
Pacific/Tongatapu
Pacific/Truk
Pacific/Wake
Pacific/Wallis
Pacific/Yap
Poland
Portugal
ROC
ROK
Singapore
Turkey
UCT
US/Alaska
US/Aleutian
US/Arizona
US/Central
US/East-Indiana
US/Eastern
US/Hawaii
US/Indiana-Starke
US/Michigan
US/Mountain
US/Pacific
US/Pacific-New
US/Samoa
UTC
Universal
W-SU
WET
Zulu

Mengatur Timezone Indonesia di Django Admin

Django lagi django lagi yang saya bahas. Jadi saya baru menyadari pada log console dan entry data yang bersifat now, tidak cocok dengan datetime negara saya di indonesia jakarta. Perhatikan saja perbedaannya.

Gambar di atas untuk tanggalnya sih sesuai dengan tanggal di negara saya yaitu 15 November 2017 tapi untuk jamnya tidak sesuai.

Bagaimana merubahnya ?
Kalian cari file dengan nama settings.py didalam folder aplikasi kalian, dan hanya cukup tambahkan ini :
TIME_ZONE = 'Asia/Jakarta'
USE_I18N = True
Lalu matikan service django kalian dan jalankan lagi, dan hasilnya seperti pada gambar saya dibawah ini :


Jika kalian bingung jenis time zone dari berbagai negara cari di blog ini informasinya ketikan di kolom search timezone.

Mudahnya Membuat View Di Django

Yes, django menjadi salah satu framework favorit saya, yang mungkin belakangan ini saya sering kali membahas mengenai django dan python. Oke disini saya akan menjelaskan secara simple cara membuat view di django, view disini bisa sesuka kita ingin menampilkan apa saja, disini saya ingin memberikan tutorial singkat dan mudah membuat view yang dirender dari file html. Tips ini bisa kalian gunakan jika kalian mempunyai template.
Pertama kalian sudah pastikan mempunyai sebuah modul ya, disini saya mempunyai aplikasi bernama belajar, jadi folder pathnya adalah belajar, didalam nya ada folder belajar lagi, dan sebuah modul dengan nama biodata.
Folder belajar
  • belajar
  • biodata
  • manage.py
Kita konsetrasi ke folder yang saya cetak tebal ya. 

Folder Biodata
Buka file dengan nama views.py, jika tidak ada kalian buat saya file kosong dengan nama views.py, jika sudah copy paste code dibawah ini, nanti akan saya jelaskan.
from django.shortcuts import render, redirect

def profilview(request):
    return render(request, 'profil.html')
Maksud dari code diatas adalah kita akan merender sebuah file html dengan nama profil.html dengan menggunakan import render dan redirect. Sekarang dimana saya harus meletakan file profil.html yang akan di tampilkan tersebut ?

Oh iya yang saya cetak tebal di script itu adalah nama function ya, karena di python untuk function pasti menggunakan "def namafunctionyaapa"

Didalam folder biodata kalian buat folder dengan nama templates (ingat ya harus menggunakan huruf s diakhir "templates"), didalam folder templates kalian buat file dengan nama profil.html.

Coba saja buat tester apakah viewnya berjalan kalian buat script html hello world, bisa kan membuat file html ?? hehehe yaudah saya kasih contoh ya :
<!DOCTYPE html>
<html>
<head>
    <title>Product</title>
</head>
<body>
<h1>Hello Django Python</h1>
</body>
</html>
Oke sekarang kita beralih ke folder aplikasi kalian, dalam contoh diatas saya akan ke folder Belajar > Belajar (sejajar dengan folder biodata).
Cari file dengan nama urls.py
Tambahkan script ini :
from biodata import views as profilview_views
lalu kalian masukan ke dalam urlpattern = [ ..... ] script dibawah ini :
url(r'^profil/', profilview_views.profilview),
Jika kalian perhatikan, nanti kalian akan membukan url viewnya di alamat localhost:8000/profil 

Bagaimana sudah jelas ? mudahkan ?

Hapus Project Atau Repository di Gitlab

Gitlab, sudah tidak asing lagi lah ya dengan namanya untuk dikalangan para programmer. Disini saya akan menjelaskan secara singkat, bagaimana menghapus project yang sudah terbentuk di Gitlab. Jika diperhatikan pada halaman home project opsi Delete tidak akan ada. Coba Perhatikan : 


Lalu cara ini saya temukan di Stackoverflow :
  • Setelah kalian buka project kalian yang hendak di hapus,
  • Lirik menu bagian kiri kalian, dan cari Menu dengan nama Settings
  • Pilih General
  • Kalian Cari Advanced settings lalu kalian Expand.
  • Perhatikan gambar dibawah ini, 
Pada saat kalian klik Remove Project, akan muncul notifikasi yang informasinya adalah bahwa project yang dihapus tidak akan bisa dikembalikan lagi, dan ikuti perintahnya untuk mengetikan sesuatu di kolom yang disediakan, lalu klik confirm


Mudah bukan ?

Mengaktifkan Debuging Mode di Front Accounting

Saya tidak akan menjelaskan mengenai aplikasi apa Front Accounting itu, sudah banyak yang menjelaskan mengenai aplikasi open source yang satu ini di google.


Debuging untuk Front Accounting sudah secara default off, bagiamana cara menghidupkan debuging mode di Aplikasi ini ? 

Kalian buka file dengan nama config.php
Ubah pada baris ini yang semula bernilai 0 menjadi 1 : 
$show_sql = 1;
$go_debug = 1;
Sekarang coba restart aplikasinya, jika nanti ada error syntax sql atau scripting akan tampil error message nya.
Selamat mencoba.

Salah Kirim Pesan Di Whatsapp Bisa Dihapus Sekarang

Ayo upgrade whatsapp kalian ke versi terbaru. Siapa sih yang tidak kenal dengan Aplikasi Messanger yang satu ini. Kali ini ada perubahan yang asik di whatsapp, sama seperti BBM Messanger bisa menghapus pesan yang sudah terlanjur terkirim.


Biasanya ini berlaku jika kita punya banyak group whatsapp, sering kali kita melakukan salah kirim pesan, dan akhirnya sudah terlanjur terkirim dan terbaca orang, tidak bisa di delete pula. Nah sekarang whatsapp mempunyai fitur delete 2 jenis :
  • Delete For Me, fungsi ini untuk mendelete pesan hanya di akun si pengirim, di akun penerima pesan tersebut tidak hilang.
  • Delete For Everyone, fungsi ini untuk mendelete pesan baik di si pengirim dan si penerima pesan. Hanya saja untuk fitur ini whatsapp hanya mentoleransikan pesan yang dapat dihapus kurang dari 7 menit, jika sudah melebihi 7 menit maka opsi hapus ini tidak ada.
Jika kalian menggunakan opsi Delete For Everyone, maka si penerima akan mendapatkan pesan "This Message was deleted". Si penerima pesan akan tetap mengetahui ada pesan yang masuk kedia dan dihapus oleh si pengirimnya.

Sudah canggih kan sekarang aplikasi yan banyak digunakan user pengguna android dan IOS ini. Kita nantikan akan ada fitur apalagi setelah ini.

Menyembunyikan WP-Admin Login Admin Wordpress

Wordpress CMS yang secara umum semua orang mengenalinya, dan mungkin banyak yang suka menguji sistem keamanan website yang dibuat dengan CMS ini. Pintu dasar untuk mengacak-acak situs yang dibuat dengan menggunakan wordpress adalah halaman administratornya yang secara default url nya adalah namasitus/wp-admin.


Bahaya jika orang lain mengetahui alamat loginnya, lebih bahaya lagi apabila mengetahui username dan passwordnya, tahun 2010 lalu saya suka menguji beberapa website yang menggunakan wordpress dengan menggunakan bruteForce Password dengan menggunakan scanning wp tools di OS Backtrack. Tapi kali ini saya tidak akan membahas masalah itu ya, karena saya sudah lama meninggalkan dunia seperti itu.

Disini saya hanya memberikan sedikit tips yang mungkin orang lain sudah banyak membahas "Bagaimana cara menyembunyikan alamat administrator", dalam kata lain, jika orang mengetikan wp-admin tidak akan kebuka form login admin nya.

Caranya adalah :
  1. Masuk kedalam administrator wordpress kalian melalui wp-admin
  2. Setelah itu masuk ke menu Plugin, dan add new plugin
  3. Pada bagian "Search Plugin" atau pencarian plugin (Secara Online), kalian cari plugin dengan nama ini "HC Custom WP-Admin URL"
  4. Klik Install, dan tunggu prosesnya hingga selesai, lalu klik "Aktivate" / Aktifkan.
  5. Sekarang kalian ke Menu Settings - Permalinks
  6. Jika kalian perhatikan sebelumnya tidak ada kolom field dengan nama "Wp Admin Slug", field ini adalah bawaan dari plugin yang sudah kita install tadi.
  7. Jika kalian kosongkan field tersebut maka, url wp-admin akan tetap aktif, tetapi jika kalian isi dengan kata-kata sesuka kalian (usahakan 1 kata dan jangan terlalu panjang agar mudah di ingat), karena saya belum menemukan caranya apabila lupa url admin yang di redirect dengan plugin ini.
Selamat mencoba cara simple ini, semoga bermanfaat.

Kolaborasi Gunicorn dengan Django

Sebenarnya saya bingung ingin memberikan judul apa, intinya saya ingin mengkolaborasikan django dengan Gunicorn. Gunicorn itu apa sih ? coba deh kalian baca baca di google, menurut pemahaman saya :
The Gunicorn "Green Unicorn" is a Python Web Server Gateway Interface (WSGI) HTTP server
Oke langsung saya bahas aja bagaimana caranya, saya mengimplementasikan nya di Ubuntu dan CentOs. 

Pertama kalian install gunicornnya dengan menggunakan pip, caranya adalah 
sudo pip install gunicorn
Untuk install di CentOs cuma ketikan saja : pip install gunicorn, sebelumnya kalian harus menginstall pip ya.

Lalu runningnya bagaimana ? sudah tidak menggunakan runserver lagi gan, jadinya pakai seperti dibawah ini :
gunicorn hello.wsgi:application --bind example.com:8001 
Yang saya cetak tebal itu harus disesuaikan dengan aplikasi kalian ya. Ini adalah milik saya :

Install Plugin atau Update Plugin di Wordpress minta akun FTP

Weleh, iseng iseng nyobain cms yang satu ini, sudah lama saya meninggalkan cms wordpress, joomla dan drupal, sejak saya mempunyai cms sendiri untuk menggarap project-project company profile atau website info lainnya.



Saking penasarannya sekarang saya coba menginstall wordpress versi terbaru, ternyata gaya nya wordpress masih sama seperti yang sebelumnya ya, cuma disini saya ada keanehan, mungkin ini salah satu bentuk pengamanan cms yang dibuat oleh developer wordpress.

Pada saat saya hendak mengupdate plugin bawaan wordpress, tiba-tiba saya ditanya akun FTP, padahal saya menginstallnya di local leptop saya, lalu sama juga halnya apabila kita ingin menginstall plugin dari luar.

Lalu bagaimana solusinya agar, si wordpress tidak perlu menanyakan hal tersebut baik pada saat install plugin atau update plugin?

Caranya adalah
  1. Cari file dengan nama wp-config.php
  2. Tambahkan baris dibawah ini dimana saja, cukup kalian copy paste saja ya, biar tidak repot
define('FS_METHOD', 'direct');
Sekarang coba kalian refresh wordpress kalian, dan coba kalian update plugin/installasi plugin, dijamin berhasil.

Create Cache in Django with Cache Table

Pastikan kalian sudah mempunyai aplikasi yang dibuat dengan menggunakan django, disini saya menggunakan django versi 11 dan database postgresql.
Apa sih kegunaan Cache ? kalian bisa baca sendiri di google, disini saya hanya menjelaskan cara penggunaan cache yang disimpan ke dalam tabel.
Pertama kalian buka settings.py kalian dan tambahkan baris dibawah ini :
CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
        'LOCATION': 'cachetable'
    }
}
Location adalah nama tabel saya bernama cachetable, bagaimana cara membuatnya ? dan field nya apa saja ?

Sekarang kalian stop django servis kalian dan jalankan perintah dibawah ini :
python manage.py createcachetable
Lalu coba kalian lihat didatabase kalian, pasti ada tabel baru kan ? dan bagaimana taunya cache ini bekerja ? coba kalian jalankan django aplikasi kalian, dan coba kalian load page yang ada datanya, dan coba kalian buka isi tabel dari cachetable.

Sekian.
 

No protocol specified - Ubuntu 17 - Kasus GUI Lampp

Sampai sekarang saya masih belum bisa menangani error seperti dibawah ini :


Saya baru menyedari ketika saya ingin membuka GUI nya Lampp, setelah itu munculah kecurigaan saya, saya coba ketik sudo nautilus, dan ternyata tidak tampil, lalu bagaimana saya bisa masuk kedalam direktori explorer ROOT ?? Sampai sekarang saya masih belum solve, tetapi untuk kasus Lampp saya punya alternatif lain apabila sobat pembaca menemukan masalah error seperti diatas.
Unknown Error couldn't connect to display ":0.0"
Biasanya saya memanggil Gui Lampp dengan cara :
sudo /opt/lampp/manager-linux-x64.run
Dan ini sudah dibahas pada artikel saya disini : http://www.mhafid.info/2015/11/start-xampp-gui-for-ubuntu.html

Nah cara lainnya adalah dengan mengetikan :
sudo /etc/init.d/apache2 restart
Matikan dulu apache bawaan ubuntu kalian lalu ketikan lagi :
sudo /opt/lampp/lampp start
Dan coba kalian akses localhost, sudah dijamin bisa, tetapi dengan cara ini tidak ada Gui Lamppnya, seperti pada gambar dibawah ini :


Oke nanti akan share apabila saya sudah menemukan solve problemnya.
 

Search Foregin Key or Related in Django Admin

Fitur searching harus dipikirkan karena menurut saya feature ini adalah yang terpenting dan tidak boleh ketinggalan, karena kalo sudah bicara data banyak, search data sangat diperlukan, disini saya akan membahas mengenai search data di django admin yang menggunakan data relasi. Saya akan membahas mengenai engine search django admin di postingan berikutnya.
Disini saya mempunya sebuah tabel di database yang isinya hanya foreign key saja, idnumber id number saja dan pastinya id ini mempunya relasi di database lain, lalu bagaimana dengan teknik search di django adminnya ?

Jika kita ke file admin.py, untuk menampilkan data berelasi di tabel admin django sangat mudah, hanya tinggal menyebutkan fieldnya apa di bagian List Display, dan sudah otomatis jika ada relasinya akan tampil, karena setup di model.py nya sudah menyebutkan type foreign key ke modul mana.

Lalu kalo searching bagaimana ??

Caranya mudah, perhatikan skema saya dibawah ini :
search_fields = ['foreignkeydiModel.py__namafieldInduknya',]
Mudah bukan ?

Cara Menukarkan Pulsa Cashtree di Tokopedia

Yup siapa sih yang tidak kenal cashtree, suatu aplikasi layanan yang menawarkan pulsa gratis, dan semenjak di akhir-akhir ini cashtree sudah tidak lagi menerima penukaran uang elektronik yang kalian kumpulkan dengan pulsa, tetapi kalian bisa menukarkan dengan voucher atau gift yang sudah terdaftar di cash tree. Supaya tidak penasaran coba buka aplikasi cashtree kalian dan masuk ke menu tabulasi  shop.
Disini saya akan memberikan tutorial bagaimana kalian tetap bisa membeli pulsa dengan menggunakan uang kalian di cashtree.

Syarat dan ketentuan berlaku ya, ini dia caranya :
  • Sudah terinstall aplikasi cashtree di ponsel android kalian
  • Account cashtree kalian sudah terkumpul uangnya, minimal 7ribu rupiah
  • Sudah memiliki Account di tokopedia
Caranya adalah :
  • Buka cashtree kalian dan masuk ke dalam menu SHOP
  • Pilih Gambar Tokopedia (Tokocash Voucher), klik gambar tersebut
  • Nanti Cashtree akan muncul konfirmasi bahwa kamu akan membeli voucher tokopedia senilai 5.000 rupiah. 
  • Klik Beli jika kalian ingin melanjutkan, dan klik batal jika kalian ragu untuk menukarkan voucher
  • Setelah kalian klik Beli kalian akan di bawa ke browser dan membuka link Tokopedia kalian, ups sebelum membuka link, kalian akan mendapatkan kode acak dari cashtree, daripada kalian catat/kalian hafalkan lebih baik klik COPY ya
  • Setelah browser terbuka link tokopedia, kalian login terlebih dahulu dengan menggunakan akun tokopedia kalian, lalu masuk ke halaman GIFT Number. Paste code yang sudah kalian copy barusan
  • Nanti akan ada konfirmasi bahwa voucher gift 5.000 kalian akan masuk ke tokocash di tokopedia
Setelah tahap diatas selesai kalian buka tokopedia kalian anda, dan perhatikan bagian tokocash, pasti sudah bertambah, dan kalian akan menerima konfirmasi SMS dari tokopedia bahwa pengisian tokocash berhasil.
Hal ini bisa dilakukan hanya 1 hari 1 kali ya guys, jika kalian ingin menukarkan pulsa 10.000 ya kalian lakukan langkah seperti diatas ke esokan harinya.

Lalu bagaimana penukaran pulsanya ???

Sip pertanyaan yang bagus.. 
Caranya adalah kalian membeli pulsanya melalui tokopedia dengan metode pembayarannya dengan TOKOCASH. hehehehe

Sama aja kan bisa ditukar pulsa juga ? Sekian dan terima kasih

Cara Installasi Endless OS

Distro linux sekarang sudah banyak ada dimana - mana, dan pastinya free, ini adalah yang membuat saya jatuh cinta sama linux sudah bertahun-tahun lamanya, disini saya akan mengulas bagaimana cara installasi OS Linux Endless OS. Saya tidak akan membahas lebih jauh tentang OS ini, kalian bisa baca disini ENDLESS OS.

Oke disini saya coba melakukan installasinya didalam virtual karena leptop saya dasarnya menggunakan ubuntu dan saya belum bisa memastikan apakah OS ini nikmat buat developer seperti saya.

Langkah 1
Pada saat kita memulai boot ISO nya, kita langsung dihadapkan Welcome page yang minimalist seperti pada gambar dibawah ini :



Langkah 2
Selanjutnya anda akan di bawa untuk memilih bahasa OS nya, saya pikir hanya pada saat proses installasi saja, ternyata bahasa yang dipilih ini akan berdampak kepada penggunaan OS nya.


Langkah 3
Menentukan apakah kalian ingin try dulu atau mau langsung coba installasi, try disini maksudnya adalah mencoba OS nya tanpa melakukan install ulang.


Hati hati pilihan berikutnya adalah reformat, saya dari dulu menggunakan linux tidak pernah yang namanya dual boot, saya selalu consisten memakai 1 OS yaitu Linux. Jadi apabila kalian bertanya bagaimana jika dual boot, saya mungkin tidak akan membahasnya.

Langkah 4
Ini adalah versi OS nya yang kalian download apa, pada contoh dibawah ini saya menggunakan yang BASIC.



Langkah 5
Proses installasi akan berjalan dan tidak membutuhkan waktu yang lama, dan yang menariknya lagi tidak perlu membutuhkan koneksi internet pada saat installasi serta tidak ada konfigurasi yang rumit.

Langkah 6
Jika proses bar sudah selesai maka akan ada perintah untuk PowerOFF perangkat anda, seperti pada gambar dibawah ini :

Setelah kalian power off, coba kalian nyalakan lagi, dan taraaaaaaa OS nya siap digunakan.

Cleaning up Django migrations

Oke saya disini akan membahas mengenai folder migrations yang ada di setiap modul app django kalian, selama masa development mungkin kalian tidak terlalu memperhatikan folder tersebut, padahal jika diperhatikan file-file yang ada didalam folder migrations itulah yang membuat ukuran folder aplikasi anda besar, karena setiap kali mengcompile model app, pasti akan terbentuk 1 buah file migration baru. Selain membuat file, si django nya pun menginsertkan data ke dalam tabel django_migrations, coba kalian perhatikan database kalian.
Disini saya akan memberikan tips menghapus file file migrations tersebut yang aman dan tidak membuat aplikasi anda error pada saat di jalankan runserver, makemigrations dan migrate.

Ikuti langkah-langkah dibawah ini ya :
  1. Stop service django server aplikasi nya
  2. Ketikan ini : time python manage.py migrate untuk mengecek apakah modul aplikasi kalian ada yang error, jika terdapat error sebaiknya kalian perbaiki terlebih dahulu
  3. Masuk kedalam database kalian dan cari tabel bernama django_migrations, silahkan kalian clear datanya bisa dengan menggunakan truncate atau menggunakan syntax delete. Ingat ya delete datanya saja BUKAN delete tabelnya
  4. Silahkan masuk kedalam setiap folder Migrations di setiap folder app kalian, hapus semua file yang ada didalam folder tersebut KECUALI __init__.py dan __init__.pyc
  5. Jika sudah ketikan perintah ini di terminal kalian :
python manage.py makemigrations
time python manage.py migrate --fake
Oke sekarang kalian jalankan aplikasi kalian dengan runserver. Semoga berhasil. 

Query Session Login di Django Admin

Query di django admin kita kenal dengan teknik ORM, kalian bisa baca tentang ORM itu apa, jadi di dalam pythonnya sendiri tidak ada istilah penggunaan sql query seperti select dan update bahkan delete. Disini saya akan membahas contoh query sqlnya dan bagiamana di ORM djangonya.
Disini saya akan mengambil kasus query dengan where sessionnya dari django nya sendiri. Oke saya akan mulai, coba perhatikan pada penggalan query diatas:
Select akun_id, employee_id, permit from hris_empaccount where akun_id = id.user(Session)
Yang dicetak tebal itu saya ingin wherenya berasal dari session django admin yang mengambil field ID dari tabel auth_user, sedangkan modul user sendiri  di django adalah memakai model users.

Oke sekarang kita ke django ORMnya,
Pertama kalian membuat import fungsi auth dulu seperti dibawah ini :
from django.contrib.auth.models import Permission, Group, User
Setelah itu kalian membuang fungsi dengan menggunakan "def", ini fungsi milik saya :
def get_actions(self, request):
        current_user = request.user
        akunId = Empaccount.objects.get(akun_id=current_user.id)
        print akunId.id
Perhatikan yang dicetak tebal :

  • request.user adalah sebuag tipe request session dari modul user si djangonya sendiri
  • Emppaccount, adalah model milik saya, ini nama tabel di databasenya adalah emppaccount
  • akun_id, adalah salah satu field yang ada di tabel emppaccount yang akan saya matchkan ke id dari tabel auth_user (bawaan si djangonya).
  • Print akunId.id, ini adalah cara saya untuk mencetak hasil dari baris query orm yang saya buat dan akan tampil di console pada saat kalian merefresh, perhatikan milik saya

Coba kalian perhatikan jika saya printnya hanya akundId, maka akan tampil seperti pada gambar diatas "Rohmat Mamat". Entah ini dari mana where querynya padahal saya tidak mendefinisikan fieldnya, itu adalah orm django nya yang bekerja, jika kalian tambahkan parameter.namafieldnya, nanti yang akan di print adalah data dari field itu saja.

Bagiamana jelas tidak ?

Mencegah Entry Data Duplikat (data sama) di Django

Wah ini penting nih, hal semacam ini harus ada di beberapa modul tertentu yang kita buat di aplikasi, yaitu mencegah terjadinya duplikat data pada saat entry data. Nah untuk di django mudah loh, gak perlu main kueri sana sini, karena memang base on nya django adalah orm.
Jadi kita akan melakukan pencegahan ini didalam model.py dari sebuah modul yang akan kita cek sebelum data di insertkan.

Perhatikan baris code model saya di bawah ini, dan kalian hanya menambahkan meta def fungsinya saja yang saya cetak tebal.

class Empaccount (models.Model):
          akun = models.ForeignKey(User, verbose_name="Username")
    employee = models.ForeignKey(Employees, verbose_name="Employee Name", limit_choices_to={'status': 'Y'})
    def __unicode__(self):
        return self.employee.name
    class Meta:
        unique_together = ["akun", "employee"]
Dalam contoh diatas, bearti saya ingin membuat unik 2 field yaitu akun dan employee, pastikan jika sudah selesai kalian makemigrations dan migrate. Jika muncul error pada saat kalian menjalankan runserver, kalian harus cek di tabel di databasenya terlebih dahulu pastikan tidak ada data unik (kasus existing model) .

Enable HTTP2 Django with Channel

Pada postingan sebelumya saya membahas mengenai websocket dengan channeling di django, lalu kelanjutannya adalah pada log consolenya ada saran untuk menggunakan http2 dan implementasinya sebagai berikut
Install ini dulu :
sudo pip install -U 'Twisted[tls,http2]'
Jika sudah coba jalankan django kalian, bukan dengan menggunakan manage.py runserver ya tetapi dengan perintah dibawah ini :
daphne -b 0.0.0.0 -p 8001 broker.asgi:channel_layer 
Yang saya cetak tebal adalah nama project kalian, kalian bisa menjalankan step ini apabila kalian sudah berhasil memasang websocket seperti pada tutorial saya sebelumnya.


Perhatikan log nya, HTTP/2 support enabled, dan on channel layer dengan port 8001

Thanks for read my post.

Baca ini : http://quamiller.com/1gS4

Integrasi Websocket Di Django

Yoyoyo,, kali ini saya akan membuat bagaimana cara mengintegrasikan django dengan websocket yang menggunkan channel dari si pythonnya. Saya menggunakan websocket ini untuk keperluan pembuatan chat / messaging, ya setidaknya bisa dibilang real time.
Mungkin dari kebanyakan tutorial yang bertebaran banyak membahas websocket django dengan redis, tetapi kalian tidak perlu kwatir untuk redisnya, saya tidak akan membahas mengapa menggunakan redis untuk websocket django nya, sedangkan saya menggunakan postgresql kok, gak masalah database engine apapun.

Pertama kalian harus melakukan install redis servernya dengan mengetikan :
sudo apt install redis-server
Jika kalian tidak menginstall ini, maka pada saat kalian mengikuti tutorial websocket di internet pasti akan muncul connection refused, dimana yang refused adalah port nya si redis 6379. Setelah itu install asgi redis dengan pip :
pip install asgi_redis
Jika sudah di install sekarang, di modul intinya agar si django bisa menggunakan websocket kalian harus install channel dengan menggunakan pip :
pip install channels==1.1.5
Oke semua sudah disiapkan, sekarang coba buka settings.py didalam subfolder project kalian dan tambahkan baris ini :
redis_host = os.environ.get('REDIS_HOST', 'localhost')
CHANNEL_LAYERS = {
    "default": {
        "BACKEND": "asgi_redis.RedisChannelLayer",
        "CONFIG": {
            "hosts": [os.environ.get('REDIS_URL', 'redis://localhost:6379')],
        },
        "ROUTING": "broker.routing.channel_routing",
    },
Sekarang coba kalian jalankan manage.py runserver, coba perhatikan log record di consolenya, seperti punya saya dibawah ini :


Sekarang saya ingin menghidupkan http/2 dan twisted extrasnya, nantikan di tutorial selanjutnya ya. Thanks before.
 
 

Django Package Json Installer as Node Js

Nah disini saya sering kerepotan install pendukung pip package local django. Saya bingung menjelaskannya, jadi disini saya ingin membuat package installer django, pada saat pindah ke hostingan saya hanya butuh sekali installer pip yang mendukung aplikasi saya, tanpa harus install pip package satu per satu. 

Jika di node js kita mengenail npm install json package, naah untuk di django kita menggunakan requirements.txt. Lalu bagaimana cara membuat file tersebut yanng bisa melakukan installer pip otomatis ??

Caranya mudah ketikan ini di dalam folder project django kalian.
pip freeze > requirements.txt
Setelah coba kalian lihat didalam root folder project kalian, pasti akan terbentuk secara otomatis file requirements.txt, jika kalian buka maka isinya adalah kumpulan package pip yang sudah anda install untuk kebutuhan project kalian.

Export Data Django Admin to XLSX

Lagi lagi kemudahan django framework ini banyak dimanjakan dengan berbagai plugin yang siap pakai, walaupun tidak menutup kemungkinan harus ada modifikasi coding sedikit. Disini saya akan menjelaskan bagaimana cara membuat export data yang bisa dipilih fieldnya sesuai dengan kebutuhan kita untuk mendownlod datanya.

Gambar dibawah ini adalah aplikasi yang sudah terpasang plugin export : 


Pertama kita pilih terlebih dahulu datanya yang akan di download dengan cara memberikan centang pada box kecil di kolom pertama, bisa menggunakan check all atau satu persatu. Setelah itu pilih action go export selected items. Maka selanjutnya sebelum mendownload datanya, kalian akan ditanyakan apakah mau semua field atau field tertentu saja, dan format outputnya mau html, csv atau xlsx. Perhatikan gambar dibawah ini :

Oke sekarang kita coba pasang pluginnya :
install dengan menggunakan pip : sudo pip install django-export-action
Sekarang kalian buka settings.py kalian dan tambahkan di INSTALLED_APPS :
'export_action',
Jika sudah sekarang kalian buka urls.py dan tambahkan baris dibawah ini
url(r'^export_action/', include("export_action.urls", namespace="export_action")),
Sekarang kalian coba restar servicenya dan kalian coba rasakan sensasinya.

Combo Box Condition Model in Django

Bahas django lagi, django lagi. Jika kita membuat sebuah form pastinya kita tidak akan jauh dari element combobox. Disini saya akan membahas combo box yang data listnya diambil dari database dengan menggunakan model.py milik django secara default, pada bagian model.py kita akan memodifikasi baris fieldnya sedikit.

Studi kasusnya begini, saya mempunya list menu yang pastinya memiliki status, misalkan saya ingin menampilkan list data menu di combobox yang memiliki status enabled dengan kondisi enable = 1 dan disabled = 2.
menu = models.ForeignKey(Webmenus, verbose_name="Menu", max_length=150, blank=False, limit_choices_to={'status': '1')
Kita menggunakan fungsi limit choices to.

Lalu bagaimana jika kita menggunakan 2 kondisi, misalkan saya mau menggunakan yang statusnya 1 dan tipenya Parent = 'P'. hayo bagaimana ?
Jika kita melihat kondisi contoh diatas yang sebelumnya sih seharusnya sudah bisa terbaca bahwa data nya modelnya menggunakan tanda kurung kurawal, bearti menggunakan ????? Yes jawaban anda benar.

Begini jadinya :
menu = models.ForeignKey(Webmenus, verbose_name="Menu", max_length=150, blank=False, limit_choices_to={'status': '1', 'tipe': 'P')
Mudah bukan ?

Collectstatic Django Not Working

Walah sok bahasa inggris judul postingannya, oke disini saya akan menjelaskan kenapa sih Collectstatic tidak berfungsi pada saat kita melakukan running 
python manage.py collectstatic
Kalian harus tau dulu fungsinya Collectstatic, biasanya ini kalo kita bermain widget dan bermain style theme membutuhkan Collectstatic untuk menyimpan file environment dari plugin / widget tersebut.

Oke inti permasalahannya adalah di bagian file setting.py kalian, sekarang kalian ikuti setting nya seperti punya saya, setelah itu coba kalian makemigrations ulang dan di migrate ulang, berikut bagian yang harus kalian tambahkan :
STATIC_URL = '/static/'
STATIC_ROOT = 'static'
LOGIN_URL = '/login/'
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "assets"),
)
Sudah dapat dipastikan nanti akan terbentuk secara otomatis folder static didalam root folder kalian. Dijamin berhasil.
Back To Top