First and foremost we need very strong confidence. Only when we have confidence can we have courage and strength, and only when we have courage and strength can we overcome difficulties. - Premier Wen Jiabao
Thursday, May 27, 2010
Extending django model with custom search method
This is really fun. Been requested to developed a prototype for a simple system, my immediate choice is django, this time rather than using sqlalchemy, i'm using anything that comes with django umbrella. In this prototype, I add an ajax based auto completion/suggestion search input form, just to give a small 'wow' effect to my customer. Using jquery ajax call, and returning json list of dictionaries.
The best part actually the way how you can extend django model to add you own specific method, for example i add a search method in profile model.
once extended you can simply call it :
searchObj = Profile.objects.search(request.GET['q']).order_by('prof_firstname')
and in the same time, the search box actually allowed user to search for profile firstname or lastname and aslo ic number using the same input box.
and here how you can do it in your models (this is my django profile model file):
make sure you add the ProfileManager class inside your model (highlighted in yellow).
# Load modules needed
import operator
from django.db import models
from django.db.models import Q
class ProfileManager(models.Manager):
def search(self, search_terms):
terms = [term.strip() for term in search_terms.split()]
q_objects = []
for term in terms:
q_objects.append(Q(prof_firstname__icontains=term))
q_objects.append(Q(prof_lastname__icontains=term))
q_objects.append(Q(prof_ic__icontains=term))
# Start with a bare QuerySet
qs = self.get_query_set()
# Use operator's or_ to string together all of your Q objects.
return qs.filter(reduce(operator.or_, q_objects))
class Profile(models.Model):
""" table profile """
prof_ic = models.CharField(max_length = 12, primary_key = True) # mungkin ic ada abjad (tentera)
prof_firstname = models.CharField(max_length = 32)
prof_lastname = models.CharField(max_length = 32)
prof_dob = models.DateTimeField()
prof_gender = models.CharField(max_length = 1)
prof_race = models.CharField(max_length = 32)
prof_address_1 = models.CharField(max_length = 128)
prof_address_2 = models.CharField(max_length = 128)
prof_city = models.CharField(max_length = 32)
prof_state = models.CharField(max_length = 32)
prof_country = models.CharField(max_length = 32)
prof_postcode = models.CharField(max_length = 16)
prof_telno = models.CharField(max_length = 16)
prof_mobileno = models.CharField(max_length = 16)
prof_email = models.EmailField(max_length = 128)
prof_img = models.ImageField(max_length = 256, upload_to = 'profile')
prof_sysdate = models.DateTimeField()
objects = ProfileManager()
class Meta:
app_label = "pingat"
Getting IP Address/Interfaces with Python
# easy_install netifaces
in python shell:
// list all interfaces
>>> import netifaces
>>> netifaces.interfaces()
['lo0', 'gif0', 'stf0', 'en0', 'fw0', 'en1', 'vboxnet0']
in python shell:
// list all interfaces
>>> import netifaces
>>> netifaces.interfaces()
['lo0', 'gif0', 'stf0', 'en0', 'fw0', 'en1', 'vboxnet0']
>>>
// now get the addresses only for AF_INET
>>> for iface in netifaces.interfaces():
... if netifaces.AF_INET in netifaces.ifaddresses(iface) and\
... 'addr' in netifaces.ifaddresses(iface)[netifaces.AF_INET][0]:
... print iface, netifaces.ifaddresses(iface)[netifaces.AF_INET][0]['addr']
...
lo0 127.0.0.1
en0 192.168.2.1
en1 192.168.1.2
>>>
Tuesday, April 27, 2010
DJango Models
somehow i prefer to group all my models in one folder, however in django when u create your app, the models is inside your app folder.
# python manage.py startapp dummy
# ls dummy
__init__.py models.py tests.py views.py
in order put all apps models in a single folder structure what u need to do is as follow:
# create your model folder inside your project - i named it models
mkdir models
# edit your models and add a meta class a follow
class Meta:
app_label = "appName"
# and import it your models in models/__init__.py file
from modelfile import yourmodel
Thursday, April 15, 2010
Having fun with extjs 3.2 ...
Tuesday, April 6, 2010
sanitize your code please...!
Managed to penetrate to their internal oracle db, that stores all the confidential informations, enough to proved to them how severe the exploit was. So i send them a reports with sample data gathered and all urls/uris/pages affected to their developers.
The action taken was to blocked/denied my vps static ip address (from where i did the penetration test) instead of repairing their codes that only takes few minutes to repair.
And tonight I still can penetrate through my DSL dynamic connection and it is not just about me , the whole world too...
this is lame guys ... please sanitize your codes...
07th April 2010:
-------------------
latest updates ... they actually blocked my ip only for one reason, my ip is making lots of connection and consuming/slowing down their bandwidth/server ... now the banned has been removed becoz of "miss-understanding" , but still exploitable...
ok enough of this crap i'm not security dude by profession, better concentrate on my own projects from now on...
Wednesday, March 17, 2010
linux/*nix bash 4.x autocd ..
for those who dont know about latest features in bash 4.x :
sometime you know the folder name but to reach to that folder you need to go from one to another.
eg: /home/project/web/avs/desktop
with bash new autocd you can simply type
cd /home/**/desktop
the double '*' character indicate 'autocd'
same thing when you are frustrated with php, you can simply do:
rm -f /**/*.php
ok, first you must enable the autocd by using the following command:
shopt -s globstar autocd
happy "bash"ing :)
Monday, March 8, 2010
python psycopg2 in imac
I been banging my head making psycopg2 running on this imac with this error trying importing the module:
Symbol not found: _PQbackendPID
after googling around (almost 1 hour exactly), one important thing is about the multi architecture python supported, for this reason u need to specified for python u r using 32 bit with following command:
defaults write com.apple.versioner.python Prefer-32-Bit -bool yes
Build and install your psycopg2 again . And voila, everything works.
Mac OS X if very yummy, but coming from linux/ubuntu world where packages are easily available and almost up to date, this is a little frustration for me.
Oh well, I already fell in love with iMac (been using it for 3 days already :P ), this will be just like the old days for me with linux, where you must do things your self, compile, problem and trouble shoot your self. Things like this will make you bolder.... i mean wiser.
Regards.
- Mac g33k
Subscribe to:
Posts (Atom)