Archive

文章標籤 ‘django’

使用django modelform的save()之後,可以取得model的資料

2012年2月21日 尚無評論

原來在用modelform時,還有一個方便的小地方
原文件請看:https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#the-save-method

當新增一筆資料後,我想取得這筆資料的id,其實可以這樣做:
model:
[ccc language="python"]
class ADProject(models.Model):
platform = models.ForeignKey(Platform)
name = models.CharField(_(‘name’), max_length=200)
[/ccc]

form:
[ccc language="python"]
class ADProjectBGMAdminForm(forms.ModelForm):
class Meta:
model = ADProject
[/ccc]

view:
[ccc language="python" highlight="5″]
def adproject_create(request):
form = AdprojectForm(request.POST or None)

if form.is_valid():
f = form.save()
return HttpResponse(‘platform id is:%s, this new id is:%s’ % (str(f.platform.id), str(f.id)))

return render(request, ‘adproject-create.html’, {
‘form’: form
})
[/ccc]

重點就在第5行,似乎是方便多了

Categories: Python Tags: , ,

設定Apache上跑Django需要注意的幾個小設定

2011年12月2日 尚無評論

在Apache上的部份幾幾乎乎都用設的就行了

但為了整體安全及效能,還是要把幾個小地方設定做一下

這裡我記錄還記得的部份…….

Apache相關的:

檔案:/etc/apache2/conf.d/security

ServerTokens Full

TraceEnable On

檔案:/etc/apache2/ports.conf

NameVirtualHost *
Listen 80
檔案:/etc/apache2/apache2.conf

Timeout 300
KeepAlive Off
<ifmodule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    MaxClients          150
    MaxRequestsPerChild   2000
</ifmodule>
<ifmodule mpm_worker_module>
    StartServers          4
    MinSpareThreads      25
    MaxSpareThreads      75
    ThreadLimit          64
    ThreadsPerChild      50
    MaxClients          250
    MaxRequestsPerChild   0
</ifmodule>

#若有 mpm_event_module
#整個mark掉,因為說是過時的東西@@?!
<files ~ "^\.ht">
    Order allow,deny
    Deny from all
    #Satisfy all   #這個不要?!
</files>

設定mod_wsgi:

檔案:/etc/apache2/mods-available/wsgi_module.load

LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so
WSGIPythonOptimize 2

設定site:

檔案:/etc/apache2/sites-available/site

WSGIDaemonProcess site user=www-data group=www-data processes=4 threads=1 display-name=site
WSGIProcessGroup site

WSGIScriptAlias / /path/to/django.wsgi

ServerSignature Off   #不想在錯誤時出現host的資料
Categories: Python, uBuntu Tags: ,

安裝設定RabbitMQ / Celery

2011年11月29日 尚無評論

安裝RabbitMQ
首先要光安裝erlang-nox

$ sudo apt-get install erlang-nox

下載:rabbitmq-server_2.7.0-1_all.deb

$ wget http://www.rabbitmq.com/releases/rabbitmq-server/v2.7.0/rabbitmq-server_2.7.0-1_all.deb" title="rabbitmq-server_2.7.0-1_all.deb
$ sudo dpkg -i rabbitmq-server_2.7.0-1_all.deb

※ 官方安裝說明:http://www.rabbitmq.com/install-debian.html
執行RabbitMQ

$ sudo update-rc.d rabbitmq-server defaults
$ sudo invoke-rc.d rabbitmq-server stop/start/restart

安裝Celery套件:

$ sudo pip install -E . celery django-celery

產生必要的資料庫table

$ ./manage.py syncdb

測試 celery worker 是否可以正常執行

$ ./manage.py celeryd -l info

設定django環境指定host

# settings.py
import djcelery
djcelery.setup_loader()
INSTALLED_APPS += {'djcelery',}
BROKER_HOST = "127.0.0.1"
CELERY_ALWAYS_EAGER = True
CELERY_SEND_TASK_ERROR_EMAILS = True
CELERY_DISABLE_RATE_LIMITS = True

注意:
若在開發環境或debug時或沒有 rabbitMQ 環境下時,CELERY_ALWAYS_EAGER 可設為 True,這樣在執行時就會直接執行,不會放進 Queue 裡。但是上到正式環境,請設為 False。相關說明在此:http://docs.celeryproject.org/en/latest/configuration.html#celery-always-eager

設定 celery 執行為 daemon:

建立 celery 需要的相關目錄

$ sudo mkdir /var/run/celeryd
$ sudo chown www-data: /var/run/celeryd
$ sudo mkdir /var/log/celeryd
$ sudo chown www-data: /var/log/celeryd

加上 init.d script 以及設定檔:

下載這個celeryd-init.d-script

編輯celeryd-default檔

CELERYD_CHDIR="/var/django/BGM_ENV/svbgm" # 修改為project路徑
CELERYDENV="/var/django/BGM_ENV" # 修改為project路徑

CELERYD="$CELERYDENV/bin/python $CELERYDENV/svbgm/manage.py celeryd"
CELERYD_MULTI="$CELERYDENV/bin/python $CELERYDENV/svbgm/manage.py celeryd_multi"
CELERYD_USER="www-data"
CELERYD_GROUP="www-data" 

CELERYD_LOG_FILE="/var/log/celeryd/%n.log"
CELERYD_PID_FILE="/var/run/celeryd/%n.pid" 

export DJANGO_SETTINGS_MODULE="settings"

放置script及default

$ sudo mv celeryd-init.d-script /etc/init.d/celeryd
$ sudo chmod +x /etc/init.d/celeryd
$ sudo mv celeryd-default /etc/default/celeryd

重啟celeryd

$ sudo /etc/init.d/celeryd restart

查看log(/var/log/celeryd/celery.log)要是沒有錯誤就可以了

Categories: uBuntu Tags: , ,

Django aggregation tutorial

2011年11月24日 尚無評論

之前搞不太懂Django的Group by來求Sum, Count之類的

後來看了這篇就清楚多了

 

Django aggregation tutorial

 

Categories: Python, 程式設計 Tags:

[轉載] Python datetime / time conversions

2011年11月22日 尚無評論

有關python對日期/時間的轉換,找到一個文章~~~~筆記!!!

來源:Python datetime / time conversions

閱讀全文…

Categories: Python, 程式設計 Tags: