30 Mart 2020 Pazartesi

Konfigrasyon Dosyası:

settings.ini:
-----------------------
[postgresql]
host = localhost
database = testdb
user = root
password = root123

------------------------------------------------------------------------------
import configparser
config = configparser.ConfigParser()
config.read('settings.ini')

#dosyadan değerleri okumak için (read file)
host = config['postgresql']['host']
database = config['postgresql']['database']
user = config['postgresql']['user']
password = config['postgresql']['password']

print(host, database, user, password)


#dosyadaki değerleri değiştirmek için (update file)
config['postgresql']['user'] = "ali"
config['postgresql']['password'] = "ali123"

with open('settings.ini', 'w') as f:
    config.write(f)

19 Eylül 2019 Perşembe

Django Konular

Django send email by settings.py
-------------------------- 
# Email settings
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
#EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' #bunu sakın kullanma mail göndermiyor
EMAIL_HOST = 'mail.xxx.com.tr'
EMAIL_HOST_USER = 'rapor@xxx.com.tr'
EMAIL_HOST_PASSWORD = '5678'
EMAIL_PORT = 587 #SSL 465, TLS 587
EMAIL_USE_TLS = True
EMAIL_USE_SSL = False
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
MAILER_LIST = ['aa@yahoo.com', 'bb@hotmail.com']


#proje dizini içinde konsoldan:
>python manage.py shell
from django.core.mail import send_mail
from django.conf import settings as ss
subject = "denemke mesajı"
message = "yazı denemesi 1111 şöçğü"
send_mail(subject, message, ss.DEFAULT_FROM_EMAIL, ss.MAILER_LIST, fail_silently=False)

10 Mayıs 2017 Çarşamba

Python için GUI Frameworks (Widget Toolkits) :


AdıKaynak GUIYazıldığı DilWindowsMacOSLinuxAndroidiOS
Tkinter  Tk c + + + - -
PyQt Qt c++ + + +  - -
PySide Qt c++ + + +  - -
wxPython wxWidgets c++ + + +  - -
PyGTK GTK+ c + + +  - -
PyGObject GOject/GTK+ c + + +  - -
Toga GTK+ c + + +  + +
Kivy Pygame c + + +  + +



Tkinter GUI Toolkits:

tkinter.ttk modülü Tk 8.5'e eklenmiş yeni bir Tk widget tema setidir.

from tkinter import *
from tkinter.ttk import *

ya da

from tkinter import *
import tkinter.ttk as ttk

Tkinterttk
ButtonButton
Canvas
CheckbuttonCheckbutton
EntryEntry
FrameFrame
LabelLabel
Listbox
MenubuttonMenubutton
Menu
Message
RadiobuttonRadiobutton
ScaleScale
ScrollbarScrollbar
Text
Toplevel
Spinbox
PanedWindowPanedWindow

sadece ttk'da olanlar

Combobox

Notebook
Progressbar

Seperator

Sizegrip

Treeview



















20 Nisan 2017 Perşembe

Ternary Operator in different programming Languages (TEK SATIRDA if else):

c , c++ :
---------------------------
? operatörü kullanılır.  şart ? deyim1 : deyim2;

value = <condition> ? <expression1> : <expression2>

int sayi;
const char *sonuc;
sayi = 14;
if (sayi < 10)
sonuc = " 0";
else
sonuc = "x";

  printf(sonuc);


yukardaki kodun eşdeğeri:

int sayi;
const char *sonuc;
sayi = 4;

sonuc = sayi < 10 ? " 0" : " ";

printf(sonuc);


python:
----------------------------------


<expression1> if <condition> else <expression2>
veya


value = <condition> and <expression1> or <expression2>


t = 0
if t == 0:
  m = 100
else:
  m = 5

yukardaki kodun eşdeğeri:


t = 0
m = 100 if t == 0 else 5

yukardaki kodun eşdeğeri:

 t = 0
m = t==0 and 100 or 5


kaynaklar:

http://stackoverflow.com/questions/394809/does-python-have-a-ternary-conditional-operator
http://stackoverflow.com/questions/8500374/python-statement-of-short-if-else
http://stackoverflow.com/questions/1686390/python-equivalent-of-short-form-if-in-c
http://www1.gantep.edu.tr/~bingul/c/index.php?ders=6


18 Nisan 2017 Salı

Django projesini Windows'ta Apache üzerinde yayına alma:
Django 1.10  , Python 3.6












1-)C:\xampp içinde xampp-control.exe dosyasından Apache'yi çalıştırın.Apache çalışıyorsa aşağıdaki işlemleri yap

2-) http://www.lfd.uci.edu/~gohlke/pythonlibs/#mod_wsgi adresinden
mod_wsgi‑4.5.15+ap24vc14‑cp36‑cp36m‑win32.whl dosyasını indir.Bu dosyayı winrar ile açıp
mod_wsgi/server içinde mod_wsgi.cp36-win32.pyd dosyaını çıkar.Bu dosayanın adını
mod_wsgi.so olarak değiştir.

3-) mod_wsgi.so dosyasını C:\xampp\apache\modules altına kopyala

4-) C:\xampp\apache\conf içinde httpd.conf dosyasını aç LoadModule yazan satırların altına

LoadModule wsgi_module modules/mod_wsgi.so

ekle


5-) C:\xampp\htdocs altına django projesi oluştur.örnek mysite olsun

6-) Bu django projesini Apache'ya tanıtmak için httpd.conf dosyasını aç, en altına
bu satırları ekle:

# Python WSGI interface module
<IfModule wsgi_module>
WSGIScriptAlias / "C:/xampp/htdocs/mysite/mysite/wsgi.py"
WSGIPythonPath "C:/xampp/htdocs/mysite"
<Directory "C:/xampp/htdocs/mysite">
Allow from all
</Directory>
</IfModule>


7-)xampp-control.exe dosyasından Apache'yi restart edin.

8-)browserda http://localhost/ yazdığınızda django projesi çalışacaktır.


kaynak:
https://www.youtube.com/watch?v=VnR5O4IjmOs
https://www.devbattles.com/en/sand/post-304-using+Apache+and+Python+WSGI+on+Windows

7 Mart 2017 Salı



Örnek:Personellerin ücretlerinin tutulduğu personel_ucret tablosundan girilen tarihe göre en büyük değerli ücreti döndürsün, delphi tarafında tablo adı personel_ucret olsun, django modelde PersonSalary olsun:

delphi:

   function maasiniAl(aid:string;atarih:TDate):double;
   var tempucr:string;
   begin
      THOUSANDSEPARATOR := #0;
      DecimalSeparator:= '.';

      result:=0;
      frmDMMYSQL.qrytemp.Close;
      frmDMMYSQL.qrytemp.SQL.Text:='select * from personel_ucret where personelid='+ aid+' and tarih<='''+DateForMySql(atarih)+'''  order by tarih desc';
      frmDMMYSQL.qrytemp.Open;
      if frmDMMYSQL.qrytemp.RecordCount>0 then
         if frmDMMYSQL.qrytemp.FieldByName('ucret').AsString<>'' then
            result:= frmDMMYSQL.qrytemp.FieldByName('ucret').AsFloat;
  end;


yukardaki kodun django karşılığı:

python (django) :

def maasini_al(pers_id, pnt_tarih):
    temp_ucret = PersonSalary.objects.filter(person_id=pers_id, created_date__lte=pnt_tarih).order_by('-created_date').first()
    return temp_ucret.salary

26 Ekim 2016 Çarşamba

Django yeni kayıt ekleme / var olan kaydı değiştirme:


def ekle(request):
    kod = request.POST.get('kod')
    ad = request.POST.get('ad')
    email = request.POST.get('email')

    personel = Personel(kod=kod, ad=ad, email=email)
    personel.save()


def degistir(request):
    kod = request.POST.get('id')
    personel = get_object_or_404(Personel, id=id)
    personel.kod = request.POST.get('kod')
    personel.ad = request.POST.get('ad')
    personel.email = request.POST.get('email')  
    personel.save()



Django template geri butonu:

< input type=button value="Previous Page" onclick="javascript:history.go(-1);">

veya

<button class="btn btn-default btn-lg" onclick="javascript:history.go(-1);">Kapat</button>

veya

<a href="javascript:history.go(-1)" class="btn btn-default">Back</a>

24 Ekim 2016 Pazartesi

PYTHON TARIH/SAAT ÖRNEK UYGULAMALAR:


Örnek:Ayın son günü (o ayın gün sayısını) bulma:

from datetime import date, datetime, timedelta

#bir aydaki gün sayısı veya ayın son günü
def last_day_of_the_month(y, m):
    m += 1
    if m == 13:
        m = 1
        y += 1

    first_of_next_month = date(y, m, 1)
    last_of_this_month = first_of_next_month + timedelta(-1)

    return last_of_this_month.day



t = (2016,2,1)

last_day = last_day_of_the_month(t.year,t.month)


kaynak:
https://wuhrr.wordpress.com/2011/04/07/determine-the-last-day-of-a-month/

Örnek:Girilen yil ay gün değerlerini birleştirerek tarih değerini elde ediniz.

python:
--------
import datetime

y = 2016
m = 10
d = 14
t1 = datetime.datetime(y, m, d)
print(t1)


delphi:
--------------
procedure TForm1.Button4Click(Sender: TObject);
var y,m,d:Word;
t1:TDate;
begin
  //uses DateUtils
  y:=2016;
  m:=10;
  d:=14;
  t1:=EncodeDate(y,m,d);
  edit1.Text:= datetostr(t1);
end;


Örnek: Girilen tarih değerinden o ayın son ve ilk gününü bulunuz.(Get Last/first Day of the Month in Python)

python:
---------------
import datetime
import calendar

date = datetime.date.today()
t1 = datetime.datetime(date.year, date.month, 1)
t2 = datetime.datetime(date.year, date.month, calendar.mdays[date.month])

print(t1)
print(t2)

çıktısı:
------------
2016-10-01 00:00:00
2016-10-31 00:00:00

kaynak:http://fosshelp.blogspot.com.tr/2010/03/how-find-last-day-of-month-in-python.html



delphi:
-------------
var t1,t2:TDate;
   y,m,d:Word;
begin
//uses DateUtils
   DecodeDate(Date,y,m,d);
   t1:=EncodeDate(y,m,1); //ayın başı
   t2:=EncodeDate(y,m,DaysInMonth(Date)); //ayın sonu

İki zaman(tarih+saat) arasındaki fark( saniye cinsinden) versin:

import datetime
dt1 = "14/11/2016 13:10:22"
dt2 = "14/11/2016 15:00:22"
bas = datetime.datetime.strptime(dt1, "%d/%m/%Y %H:%M:%S")
bit = datetime.datetime.strptime(dt2, "%d/%m/%Y %H:%M:%S")
diff = bit - bas

print(diff.seconds)

sonuç:

6600


Sayısal olarak tutulmuş zaman farkını saat cinsinde dönüştürme:

>>time.strftime("%H:%M:%S", time.gmtime(6600))
>>'01:50:00'

Mesela tabloda zaman farkı dakika cinsinden,integer türünden 540 olarak tutmuş olsun.Bunu saat formatına dönüştürürsek:
gmtime saniye değerini aldığından farkı 60 ile çarpıyoruz:

import time

fark = 540 * 60
saat = time.strftime("%H:%M:%S", time.gmtime(fark))
print(saat)

sonuç:

09:00:00








Örnek:Güncel tarih,saat,tarih-saat bilgisini versin:

güncel tarih:
------------------
import time
t = time.strftime("%d/%m/%Y")

çıktısı:
25/10/2016


güncel saat:
----------------
import time

s = time.strftime("%H:%M:%S")

çıktısı:

09:43:50


güncel tarih-saat
-------
ts = time.strftime("%d/%m/%Y %H:%M:%S")

çıktısı:

25/10/2016 09:43:50

Örnek:Girilen tarihten haftanın gününü versin:

python:
-----------------------------
from datetime import datetime

s = "2016-10-02" #pazar
t = datetime.strptime(s, "%Y-%m-%d")

#Monday is 0 and Sunday is 6
haftaningunu = t.weekday()
print(haftaningunu)

çıktısı:
----
6

delphi:
------------------------------------------------
procedure TForm1.Button11Click(Sender: TObject);
var s:string;
   t:TDate;
   haftaningunu:Word;
begin
   s:= '02.10.2016'; //pazar
   t:= StrToDate(s);

   //DayOfTheWeek  1=Monday  ,  7=Sunday
   haftaningunu:= DayOfTheWeek(t);

   edit1.Text:= IntToStr(haftaningunu);

end;

çıktısı:
----
7


Örnek:İki zaman(tarih+saat) arasındaki farkı sn cinsinden versin:

python:
-----------------------------


delphi:
------------------------------------------------
//uses DateUtils 

kullanım:SecondsBetween(Now, IncSecond(Now,10))

fark:integer;
s1,s2:string;
t1,t2:TDateTime;
begin
s1:='24.10.2016 17:05:00';
s2:='24.10.2016 17:45:00';

t1:=DateTimeToStr(s1);
t2:=DateTimeToStr(s2);

fark:= SecondsBetween(t1,t2);


kaynak: http://stackoverflow.com/questions/9790204/difference-in-seconds-between-two-tdatetime-variables


Örnek:İki tarih arasında while döngüsü çalıştırma:

python:
-----------------------------

from datetime import datetime, timedelta

s1 = "2016-10-10"
s2 = "2016-10-20"

t1 = datetime.strptime(s1, "%Y-%m-%d")
t2 = datetime.strptime(s2, "%Y-%m-%d")

t = t1
while t<=t2:
    print(t)
    t += timedelta(days=1)


çıktısı:
-------
2016-10-10 00:00:00
2016-10-11 00:00:00
2016-10-12 00:00:00
2016-10-13 00:00:00
2016-10-14 00:00:00
2016-10-15 00:00:00
2016-10-16 00:00:00
2016-10-17 00:00:00
2016-10-18 00:00:00
2016-10-19 00:00:00
2016-10-20 00:00:00


delphi:
------------------------------------------------
procedure TForm1.Button10Click(Sender: TObject);
var s1,s2:string;
   t1,t2,t:TDate;
begin
   //uses DateUtils
   s1:= '10.10.2016';
   s2:= '20.10.2016';

   t1:= StrToDate(s1);
   t2:= StrToDate(s2);

   t:= t1;
   while t<=t2 do begin
      memo1.lines.add(datetostr(t));
      t:=IncDay(t,1);
   end;
end;


çıktısı:
-------
10.10.2016
11.10.2016
12.10.2016
13.10.2016
14.10.2016
15.10.2016
16.10.2016
17.10.2016
18.10.2016
19.10.2016
20.10.2016


20 Ekim 2016 Perşembe

Django User tablosuna yeni alan ekleme (adding fields to User model ):

kaynak: https://djangosnippets.org/snippets/2132/

Örnek: User tablosuna mobile adında string türden bir alan ekleyiniz:

models.py:
------------

from django.contrib.auth.models import User

mobile = models.CharField("Cep Telefonu", max_length=16)
mobile.contribute_to_class(User, 'mobile')


ardından 

python manage.py makemigrations
python manage.py migrate

yaptığınızda User (auth_user) tablosuna yeni alan eklenmiş olur,
artık bu alanı formda kullanabiliriz.

9 Ekim 2016 Pazar

YÜKLÜ PYTHON VERSİYONUNU ÖĞRENME:

>python --version


YÜKLÜ SETUP TOOLS (EASY INSTALL) VERSİYONUNU ÖĞRENME:

>easy_install --version

script dosyası Python\Python35-32\Scripts içinde

YÜKLÜ PIP VERSİYONUNU ÖĞRENME:

>pip --version

script dosyası Python\Python35-32\Scripts içinde


YÜKLÜ DJANGO VERSİYONUNU ÖĞRENME:

>django-admin --version

script dosyası Python\Python35-32\Scripts içinde


İNDİRİLEN BİR PYTHON PAKETİNİ YÜKLEME:
paketi winrar ile klasöre dönüştür bu klasörün içinde komut satırından

python setup.py install

ile kur

PIP güncelleme:
python -m pip install --upgrade pip

PIP ile yükleme/güncelleme:
--------------------------------------------

django yükleme:
>pip install django

django güncelleme:
>pip install django --upgrade

postgresql yükleme:
>pip install postgress

5 Ekim 2016 Çarşamba

How To Integrate SyntaxHighlighter To Blogger, Blogspot: https://android-expert-blog.blogspot.com.tr/2015/12/how-to-integrate-syntaxhighlighter-to.html https://www.youtube.com/watch?v=ljpLouJTfpU
using System;

namespace HelloWorld
{
    class Hello
    {
        public static void Main(String[] args)
         {
             Console.WriteLine("Hello World");
         }
    }
}
Python ile XLSX dosyalarını okuma

https://www.hermesiletisim.net/dev/python-ile-xlsx-dosyalarini-okuma#.WTb8S2jyiHs

from openpyxl.reader.excel import load_workbook

table=[]     #tablomuzun tutlacağı array.
wb = load_workbook(filename = 'dosya_ismi.xlsx', use_iterators = True)   #Dosyamızı yüklüyoruz use_iterators özelliğini true yaparak optimized reader'ı kullanmış oluyoruz.
sheet = wb.get_active_sheet()     #Dosyamızdaki aktif sheet'i alıyoruz.

for row in sheet.iter_rows():          #Kütüphanedeki rows() fonksiyonu yerine itter_rows() fonksiyonunu kullanıyoruz. Bu fonksiyon sheet içindeki satırların listesini bize dönüyor.
    line=[]                           #satırların tutulacağı array.
    for cell in row:                  #Her bir satırdaki hücreleri geziyoruz.
        line.append(cell.internal_value)       # burda value() fonksiyonu yerine internal_value() fonksiyonunu kullanıyoruz.
    table.append(line)                         #satırlarımı table array'imize ekliyoruz.


RASPBERRY PI NOTLARI:


5" HDMI EKRAN AYARLARI:

5" HDMI Rezistif Dokunmatik LCD Ekran - 800x480 (B)




putyy ile raspberry'ye bağlan

sudo nano /boot/config.txt

config.txt içinde aşağıdaki satırlarda başında # olanları kaldır aç,olmayan satırları ekle:

-----------------------------------------------------------------------------

hdmi_force_hotplug=1
hdmi_grup=2
hdmi_mode=1
hdmi_mode=87
hdmi_cvt=800 480 60 6 0 0 0
max_usb_current=1


-----------------------------------------------------------------------------
yap Ctrl+O : kaydet
Ctrl+X :çık

sudo reboot

ile cihazı yeniden başlattığında ekrana görüntü gelecek.

28 Eylül 2016 Çarşamba

PYTHON NOTLARI:


Tek satırda if else (python 3.5 if else single line):

kaynak:
http://stackoverflow.com/questions/11529273/python-condense-if-else-to-one-line

tanım:

a if cond else b

Örnek:

a=1
if a==1:
    sonuc= True
else:
   sonuc= False
print(sonuc)

yukardaki kodun eşdeğeri:

a=1
sonuc= True if a==1 else False
print(sonuc)


INTEGER SAYISIYI 8 HANE OLACAK ŞEKİLDE BINARY SAYIYI DÖNÜŞTÜRME:

kaynak:
http://stackoverflow.com/questions/10411085/converting-integer-to-binary-in-python

>>> bin(6)[2:].zfill(8)
'00000110'

örnek: Girilen byte türünden sayıyı 8 haneli olcak şekilde string veriye dönüştürnüz.

python:
---------------
decode_bin fonksiyonu girilen integer sayıyı string türünden 8 hane olacak şekilde başına 0 doldurur:

def decode_bin(int_value):
    return bin(int_value)[2:].zfill(8)

sayi = 5
s = decode_bin(sayi)



çıktısı:
00000101

delphi:
-------------
harici IntToBin adlı fonsiyonu kullanacağız.

function IntToBin(Value: Byte): string;
var
  I: Integer;
begin
  SetLength(Result, 8);
  for I := 1 to 8 do
  begin
    Result[I] := Char(Ord('0') + Value shr 7);
    Inc(Value, Value);
  end;
end;

procedure TForm1.Button3Click(Sender: TObject);
var sayi:integer;
   s:string;
begin
   sayi:=5;
   s:=IntToBin(sayi);
   edit1.Text:=s;
end;


çıktısı:
00000101

STRINGİ BELLİ BİR KARAKTERE GÖRE PARÇALARA AYIRMA ( split):

Örnek:Ayrıcı karakter  ; olsun."1;argentina;buenos aries" ifadesini ; karakterine göre parçalara ayırınız.

python:
------------------
bunun için split(ayırıcıkarakter) kullanılır.geriye "ayırıcı karakter sayısının bir fazlası kadar" bir liste(dizi) elemanları oluşur.

a = "1;argentina;buenos aires"
b = a.split(';')

b[0] #1
b[1] #argentina
b[2] #buenos aires


delphi:
------------------
Delphi için Split adında harici bir fonksiyon(procedür) kullanıyoruz.

procedure Split(const Delimiter: Char;Input: string;const Strings: TStrings) ;
begin
   Assert(Assigned(Strings)) ;
   Strings.Clear;
   Strings.Delimiter := Delimiter;
   Strings.DelimitedText := Input;
end;

procedure TForm1.Button2Click(Sender: TObject);
var a: string;
   b: TStringList;
begin
   a:= '1;argentina;buenos aires';
   b := TStringList.Create;
   try
     Split(';', a, b) ;
     memo1.Lines.add(b[0]) ;
     memo1.Lines.add(b[1]) ;
     memo1.Lines.add(b[2]) ;
   finally
     b.Free;
   end;
end;



kaynak: http://delphi.about.com/cs/adptips2002/a/bltip1102_5.htm

procedure TForm1.Button1Click(Sender: TObject);
var a: string;
   b: TStringList;
begin
   a:= 'your delphi guide';
   b := TStringList.Create;
   try
     Split(' ', a, b) ;
     memo1.Lines.add(b[0]) ; //your
     memo1.Lines.add(b[1]) ; //delphi
     memo1.Lines.add(b[2]) ; //guide
   finally
     b.Free;
   end;
end;

ancak yukaradaki delphi için tanımlanan split prosedürü tam çalışmıyor.Mesela 'TL - Türk Lirası' stringini doğru paraçalara ayıramıyor,o yüzden yeni split tanımlayalım:


procedure ParseDelimited(const sl : TStrings; const value : string; const delimiter : string) ;
var
   dx : integer;
   ns : string;
   txt : string;
   delta : integer;

begin
   delta := Length(delimiter) ;
   txt := value + delimiter;
   sl.BeginUpdate;
   sl.Clear;
   try
     while Length(txt) > 0 do
     begin
       dx := Pos(delimiter, txt) ;
       ns := Copy(txt,0,dx-1) ;
       sl.Add(ns) ;
       txt := Copy(txt,dx+delta,MaxInt) ;
     end;
   finally
     sl.EndUpdate;
   end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var a:string;
   b: TStringList;
begin
   a:= 'TL - Türk Lirası';
   //ParseDelimited(Memo1.lines,a,'-');
   b := TStringList.Create;
   try
     ParseDelimited(b,a,'-');
   finally
      Memo1.lines.Add(b[0]) ;
      Memo1.lines.Add(b[1]) ;
     b.Free;
   end;

end;

kaynak: https://www.thoughtco.com/parse-a-delimited-string-1057564