Django Admin Panel Trickleri

ana uygulamanın urls.py içinde
} süslü parantezden sonra
admin.site.site_title = “BackEnd Yönetimi”
admin.site.site_header = “Sistem Yönetimi – BackEnd”
admin.site.site_index = “Ana sayfanın başlığında yazar”
admin.py içinde
class MortalityAdmin(admin.ModelAdmin):
list_display = (‘date’, ‘tank’, ‘fishopr’, ‘quantity’,‘brutquantity’, ‘company’, ‘facility’, ‘unit’)
#admin panelden girildiğinde gelecek liste.
ordering = (‘id’)
#ilk sıralanmasının nasıl olacağını söylr
search_fields = (‘id’,‘date’,‘tank__name’)
#hangi fields(sutunlarda) arama yapılacağınıı gösterir. id ile rdbm ile bağlanmış bilgilerdein içinde
arama için __ eklenerek alan belirler.
readonly_fields = (“created”, “updated”,)
#oluşturulduktan sonra değiştirilemeyecek alanlar.
list_per_page = 25
#her sayfada kaç kayıt gösterilecek.
date_hierarchy = ‘date’
#date hiyeyrarşisi oluşturuyor.
fields = (('date','tank'),'company', 'facility', 'unit', 'fishopr', 'quantity', 'brutquantity',
          'mortalitytype',"user")alanların sıralamasını belirlersin. her virgül bir satır. ()tuple yaparsak aynı satırda olur o alanlar.
fieldsets = (
    ("Operasyonel Bilgiler", {
        'fields': ('quantity', 'brutquantity', 'mortalitytype'),
        "description": "Mortality Rakamsal Değerleri"    }),
    ('Genel Bilgiler',{
        'fields': (('date', 'tank'), 'company', 'facility', 'unit','fishopr', "user"),
        "description" : "Mortality Genel Bilgileri" ,
         'classes':('collapse',)   }))
ilgili admin sayfasını güzelce bölümlere ayırıyor. fields ile aynı anda kullanılamaz.
RichText kullanımı. Bunun için ckeditor tercih ettik biz.
pip install django-ckeditor ile yüklemeyi yapıyoruz.
sonra modele gidip import yapıyoruz.
from ckeditor.fields import RichTextField
Text olan bir alanı RichTextField() olarak değiştiriyoruz . Makemigration ve migrate yapıyoruz.
description = models.TextField(max_length=200, verbose_name=_("Description"), blank=True)
description = RichTextField(max_length=200, verbose_name=_("Description"), blank=True)

CKEDITOR_CONFIGS ={
              'default' : {
              'toolbar':'full',
              'heidght' : 700,
               'width':1000
 } }
modelin admin sayfasında ona bağlı modeli getirmek. article <- comments="" gibi.="" pre="">
class FishOperationInline(admin.TabularInline/StackedInline):
    model = Fishoperation
    fields = 'id', 'tank', 'fish_type',
oluşturduk.  ve bunu fishoperation tablosunun bağlı! olduğu admin tablosuna yazarız.
class FishEntryAdmin(admin.ModelAdmin):
    readonly_fields = ("created", "updated",)
    inlines = (FishOperationInline,)
    'classes':('collapse',
'classes':('collapse',) -> gizle göster yaptırıyor.
bir model içinde sanki alanmış gibi göstermek için @property kullanılır.

Why does DEBUG=False setting make my django Static Files Access fail?

In urls.py I added this line:

from django.views.static import serve 

add those two urls in urlpatterns:

url(r'^media/(?P<path>.*)$', serve,{'document_root': settings.MEDIA_ROOT}), 
url(r'^static/(?P<path>.*)$', serve,{'document_root': settings.STATIC_ROOT}), 

and both static and media files were accesible when DEBUG=FALSE.
Hope it helps 🙂

Django Mysql Distinct

.distinct() is the tool, but here’s the syntax I had to use :

Model.objects.values_list('name', flat=True).distinct()

This way you only get a list [A,B,C,D] of values, not the objects themseleves.

Pek zarif olmasada aşağıdaki de kullanılır.

# Fetch all rows to limit num of queries
all_rows = MyModel.objects.all()

# Query against the full list to return a list of objects
item_list = [all_rows.filter(myfield=item['myfield']).last() for item in MyModel.objects.values('myfield').distinct()]

Django Multi Language

Rosetta paketi yüklenecek.

pip install django-rosetta

urls.py :

if 'rosetta' in settings.INSTALLED_APPS:
    urlpatterns += [
        url(r'^rosetta/', include('rosetta.urls'))
    ]

settings.py :

MIDDLEWARE = [
...
'django.middleware.locale.LocaleMiddleware',
...
]

from django.utils.translation import gettext_lazy as _
LANGUAGE_CODE = 'tr'

LANGUAGES = (
('en', _('English')),
('tr', _('Turkish')),
('es', _('Spanish')),
)
LOCALE_PATHS = (
    os.path.join(BASE_DIR, 'locale/'),
)
TIME_ZONE = 'Europe/Istanbul'
USE_I18N = True
USE_L10N = True
USE_TZ = False

Linux İnternet Paylaşımı

Bir notebook veya çift ethernetli bir pc ile bağlantınızı paylaştırabilirsiniz. Tek ethernet ilede paylaştırılır ancak bu işin mantığına ters.
Wifi üzerinden bir ağa bağlısınız ve lokale ethernet üzerinden internet dağıtacaksınız!

Bilgisayarlar -> Switch -> Sizin Bilgisayarınız -> Wifi -)) ->Modem->Internet

Wifi ile bağlandıktan sonra iki işlemle dağıtım yapılabilir.
ifconfig -a ile ağ aygıtlarının isimlerini öğrenebilirsiniz.Değişiklik gösterebilir.
Terminal ekranında root yetkisi veya sudo ile işlemleri yapabilirsiniz. Ben root olarak yapacağım.

Varolan iptables (firewall rules) kurallarını siliyoruz. Daha sonra çıkış yapılacak (WLAN) portu maskeleme (MASQUERADE) işlemi yapacağız.

Ardından paket geçişlerine kernel ayarlarından izin vereceğiz.

Bundan sonrada internet kullanıma hazır.

Root olalım.

sudo -s

Aygıt isimlerini görelim.

ifconfig -a

enp0s25   Link encap:Ethernet  HWaddr 22:01:00:00:00:00
inet addr:10.0.16.1  Bcast:10.0.16.255  Mask:255.255.255.0
inet6 addr: fe80::345b:790a:fc16:ae86/64 Scope:Link
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:80234 errors:0 dropped:0 overruns:0 frame:0
TX packets:135959 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:9252198 (9.2 MB)  TX bytes:174026833 (174.0 MB)
Interrupt:20 Hafıza:f0600000-f0620000

wlp2s0    Link encap:Ethernet  HWaddr 66:77:88:a7:3f:6e
inet addr:192.168.1.43  Bcast:192.168.1.255  Mask:255.255.255.0
inet6 addr: fe80::4bcd:cf31:c389:d025/64 Scope:Link
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:474566 errors:0 dropped:0 overruns:0 frame:0
TX packets:281307 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:575242613 (575.2 MB)  TX bytes:43071000 (43.0 MB)

Benim dizüstü bilgisayarımda enp0s25 isimli aygıt kablolu wlp2s0 isimli aygıt kablosuz network aygıtıdır.  Sizde bunlar değişebilir. eth0 wlan0 gibi isimlerde alabilirler.

Ip tablolarını temizliyoruz. Daha önce yazılan kural varsa paket geçişi olmaz.

iptables -t nat -F
iptables -t mangle -F
iptables -X
iptables -t nat -X
iptables -t mangle -X

Maskeleme (MASQ) işlemi ve paket geçiş izin kuralını yazıyoruz.

iptables -t nat -A POSTROUTING -s 10.0.16.0/24 -o wlp2s0 -j MASQUERADE
iptables -A FORWARD -s 10.0.16.0/24 -o wlp2s0 -j ACCEPT

iptables -A FORWARD -d 10.0.16.0/24 -m state –state ESTABLISHED,RELATED -i wlp2s0 -j ACCEPT

ip paket geçişi için sistem geçiş tanımlaması yapıyoruz.

echo 1 /proc/sys/net/ipv4/ip_forward

İnternet çıkışımızı sağlamış oluyoruz.

Neden Linux ve Neden Linuxuzmanı

26 Nisan 1998 yılında Win.CIH virüsü ile tanıştım. O gün abimle telefon yardımı ile format atıp yeniden kurmayı öğrendik ilk bilgisayarımızı. (Anakartta Intel Flash Bios olduğundan kurtarmıştık. Normal CMOS BIOS’ların hepsi silindi.)

1999 yılı başlarında bir gün abime Hollanda’daki arkadaşından bir çok CD geldi. Redhat 5.2 yazıyordu. Uzaylı görmüş masum köylü modunda incelerken abimdeki özet bilgi ile aydınlandık.

“Bu da windows gibi kardeşim. Sağlam ve hızlı diyorlar. Kullanabilen çok azmış”

İlk windows çökmesini fırsat bilerek kurdum Celeron 300A bilgisayarımıza.  Win98 SE sonrası kurulumda bir türlü internete dial-up bağlayamadık. Dahili PCI modemimizi görmüyordu. Mecburen Win98 kurduk. Bir süre sonra bir HAYES modem edindim. İlk iş yeniden kurdum. Dial-up modem için 2 tam gün sonunda bağlantıyı yaptığımızdaki sevincimizi hala hatırlarım abimle.
Bilgisayarı O zamanlar için en çok kullandığım şey, IRC chat ve MP3 dinlemekti. Bunları rahatlıkla yaptık.

Ancak abim Web tasarım işleri yapardı. (Evet 1999 yılında) O zamanlar HTML ve ASP yazardı. Neyseki sonradan PHP’de guru olarak doğru yolu seçti, şimdilerde JavaScript, React ve Python yazıyor Mühendis Bey:)

Bizim bilgisayarda Redhat Linux’un ömrü kısa oldu fakat ben bu özgürlüğe bayılmıştım. Düşünsene Virüs derdin yok, netbus ile bilgisayarına giremiyorlar, ilave bir çok gereksiz yazılım olmadığından bilgisayarın uçuyor gibiydi. (O zamanlar bilişim ve sunucular ile ilgim olmadığın o güçlü yanları bilmiyordum)

Daha sonra çalıştığım bilgisayar firmasında Windows NT ve Novell kurup yönetmeye başladım. Ancak Novell daha cazip geliyor ve hoşuma gidiyordu.

Öğrenmeye başladığım yıllarda Anet News grubunun katkısını unutamam. Türkçe’yi bırakın ingilizce kaynak bile azdı.

Linux’u profesyonel hayatıma Redhat 9 ve squid ile soktum. Özdilek’te çalışırken kullanıcıların internet çıkışı P3 1Ghz makine ile yapılıyordu. Üzerinde ISA server vardı. Çalışsam mı çalışmasam mı kararını veremezdi çoğu zaman. 🙂
Bir hafta sonu harekatı ile ISA server yerine Redhat9 + squid ile internet hizmetini verdim.
Insan kaynakları müdürünün odaya girişini hala hatırlarım.
IK = “Ne oldu internete???”
Ben= Hayırdır dedim!
IK= “Ben böyle hızlı internet görmedim. Her ne yaptıysanız ellemeyin :)”

Sonrasında mail sistemi Exchange 5.5 ve yine P3 1Ghz makine üzerinde çalışırdı. Her hafta yeniden kurardık. Virusten ve spamdan bayılırdı makine.  Onada bir operasyonla Redhat 9 + Qmail + Spamassassin + Clamav bileşenleri ile iyi bir mail server kurdum. Pazartesi sabah geldiklerinde herkes çok mutluydu. Spamsız bir haftaya başladılar ve mailler çok hızlıydı artık.  2003 yılında yanlış hatırlamıyorsam 1milyon mail gelirdi günde. Sadece 10-12bin gerçek mail olurdu. Diğeri spamdı. Exchange nasıl dayansın bu yüke. Hotmail bile freebsd üzerinde çalıştığı yıllarda 🙂

En büyük zorluğu yöneticilerimi ikna etmekte yaşadım. O günün şartlarında daha iyi hizmet vermek için bu devrimleri gizlice yapıp sonra bildirmeye mecbur bıraktılar.  Karşı çıktıkları şeyden sonrasında vazgeçemez hale geldiler. Çok uzun yıllar bu yapıyı kullandılar.  Bu konu ayrı bir kaç yazının konusu olacak.

Hayatımdaki Linux devrimini 2004 yılında Kamil Koç ile yaşadım. Bütün alt yapısını Linux üzerinde kurduk ve halen bu yapıda çalışmakta. Bilişim sektöründe bir çok ilki yaptık ve çok keyifli zaman geçirdik. Burada Redhat Enterprise ile Oracle kullanırken diğer işlemler için Debian kullanmaya başladım.

Bir sonraki şirketim Bursagaz’da Linux kullanmaya devam ettim. Yönetim desteği ile daha hızlı ilerledim. (RHCE ve CEH). Mümkün olan bütün servisleri Linux üstünde çalıştırdım. (Proxy, Reverse Proxy, Oracle DB, Mail Gateway, Log Analyzer, Log Server, Ftp Server, Web Server vd.. )

2007 sonrası SAP sistemlerinden bazılarınıda Linux üzerinde çalıştırdık. SAP Portal, SSO Servis vb mümkün mertebe Linux üstüne kurdum.

2008’de ubuntu kullanmaya başladım. Server sürümü çıkana kadar masaüstünde ubuntu, sunucularda RHEL veya Debian kullanmaya devam ettim.

Şu anda bütün ortamlar için Ubuntu kullanıyorum. Bundan sonraki bütün meslek hayatımda linux her bulunduğum şirkette yerini aldı. Sayısını hatırlamadığım servis ve hizmeti linux üzerinden verdik dev kurumsal şirketlerde.

2008 yılından beri güvenlik araştırmacası olmamdan sonra ise hayat tarzım oldu. Benim bildiklerimi bilseniz başka işletim sistemi kullanmazsınız derim her zaman 🙂

Linux’un hayatıma yön verdiği ve özgürlük hissini sonuna kadar yaşattığını söyleyebilirim.

Kamu kurum ve kuruluşlarında özellikle uluslar arası projelerde kilit noktalarında ve köşe başlarında oldu linux ve açık kaynak kodlu yazılımlar ve geliştirme alt yapıları kullandım. Günümüzde bir çok firmada gider azalatma için özellikle kullanıldığını gördükçe mutlu oluyorum.

Bu kadar zorluktan ve yıllarca Linux’u savunmak zorunda kaldığım için kendim çok iyi geliştirmek için bir hedef koymam gerekliydi. İddalı olan bir isim ile Linuxuzmani.com sitemi açtım. Defalarca değişti, yeniden yazdım, sildim, bir daha yaptım. Ancak kendimi hep güncel tutmak için ve yeni şeyler öğrenmemi gerektirdiği için devam ettirdim. Öğrendikçe hiçbirşey bilmediğimi görüyorum ve daha çok araştırmaya devam ediyorum.

Selamlar … 🙂

Mysql Key_buffer_size uyarısı

MySQL shows warning Using unique option prefix key_buffer instead of key_buffer_size is deprecated and will be removed in a future release. Please use the full name instead

[mysqld]
...
key_buffer = 16M

aşağıdaki gibi değiştirilmeli.

[mysqld]
...
key_buffer_size = 16M

Mysql Sorgu İzleme

SHOW VARIABLES LIKE "general_log%";

+------------------+----------------------------+
| Variable_name | Value |
+------------------+----------------------------+
| general_log | OFF |
| general_log_file | /var/run/mysqld/mysqld.log |
+------------------+----------------------------+

SET GLOBAL general_log = 'ON';
 
 
kapatmak için
 
mysql> SET GLOBAL general_log = 'OFF';
  

Django Server Kurulumu – Centos

En güzel ve düzgün anlatım. Centos üzerinde Apache ve Django anlatımı. Sunucunun güvenlik ayarlarıda dahil olmak üzere baştan sonra anlatılmış. VirtualHost ayarlarında biraz uzatmış ama iş görür.