發表文章

Blank 與 Null的區別

Django models 提供了兩個選項null與blank,基本上兩者幾乎差不多,但仍有點小差異 1.null主要用在資料庫端,告訴資料庫是否可以接受null 2.blank主要用在驗證資料,在form的驗證上,當呼叫form.is_valid()時驗證 3.若是使用null=true在CharField或是TextField上,則會有空字串及None來代表沒東西,Django一般使用空字串代表沒東西,建議使用上不要使用null=true 4.所以要使用nullable的欄位 class Person(models.Model):        bio=models.TextField(max_length=500,blank=true)  #不要加上null=true

使用django 內建的login及loginout系統

1.先確定設定檔setttings INSTALLED_APPS裡面是否有django.contrib.auth及MIDDLEWARE_CLASSES設定是否正確 2.若是使用startproject建立的專案,則預設會包含 3.先行建立管理者使用 python manage.py createsuperuser 4.建立url routes from django.contrib.auth import views as auth_view urlpatterns=[... url(r'^login/$',auth_view.login,name='login'), url(r'^logout/$',auth_view.login,name='logout'), ] 5.建立範本檔 預設會讀registration/login.htm 6.客製化login view 可以在 url routes裡面傳幾個參數給login來客製化 範本檔位置 url(r'^login/$',auth_views.login,{'template_name':'core/login.htm'},name='login') 另外也可以傳客製化form使用{'authentication_form':'core/form.py'} 7.更改登錄成功轉址 在settings.py裡面加入 LOGIN_REDIRECT_URL='home' (預設值為/accounts/profile) 8.登出 範本檔預設讀registration/logged_out.html 9.使用next_page參數設定轉址 url(r'^logout/$',auth_views.logout,{'next_page':'/'},name='logout')

使用python decouple

在django設定檔中有幾個重要資料例如secret key,資料庫的位址及帳號密碼,debug狀態,allow de host,email host...等等,為了安全性需另外放在安全地方(例如不可以放在git 倉庫中) python decouple提供了一個很好的機制,來將這些資料與你的原始碼做一分離 1.安裝 pip install python-decouple 2.例如你的設定檔如下 import os BASE_DIR=os.path.dirname(os.path.dirname( os . path . abspath ( __file__ ))) SECRET_KEY='3izb^RYGLJ...' DEBUG=True 3.在專案根目錄下建立.env檔案(或是用.ini也可以),若使用git記得在.gitignore加入.env才不會將.env上傳到git hub去 .env內容如下 SECRET_KEY= '3izb^RYGLJ...' DEBUG=True 將設定檔改為 import os from decouple import config BASE_DIR=os.path.dirname(os.path.dirname( os . path . abspath ( __file__ ))) SECRET_KEY=config(' SECRET_KEY') DEBUG=config(' DEBUG',cast=bool) 3.強制類型功能 config可加入要強制的類型資料參數 例如 DEBUG=config(' DEBUG',cast=bool)則代表DEBUG需要是布林的型態

datetime 自動管理

1.django中的DateTimeField與DateField有兩個參數將之設定為true可讓日期時間自動管理  auto_now_add =>在每次新增一筆資料時自動時間設定(create_at)  auto_now  =>每次該筆資料做save動作時,時間自動設定(update_at)

templates filters =>naturaltime

1.安裝Django Humanize 在 INSTALLED_APPS加入 'django.contrib.humanize' INSTALLED_APPS=[ 'django.contrib.auth', 'django.contrib.humanize', ... ] 2使用 在templates檔案中要先load tag {% load humanize %} {{ notification.date |natualtime }} 常用的 template filter filter                       examplae apnumber           1 => one intcomma           4500000 => 4,500,000 intword              1200000 => 1.2 million naturalday          08 May 2016 => yesterday naturaltime         09May 2016 20:54:31 => 29 seconds ago ordinal                3 => 3rd 其餘請參考django document

Django Widget Tweaks

1.安裝使用pip install django-widget-tweaks 2.在INSTALLED_APPS加入 'widget_tweaks': INSTALLED_APPS=[  'django.contrib.auth', ... 'widget_tweaks', ] 3.使用方法: 在範本檔案中使用 開頭必須加上 {% load widget_tweaks %} {{ field |add_class:'form-control' }}

redirect的用法

from django.shortcuts import redirect 基本上redirect也是會傳回HttpResponseRedirect,但使用redirect可以傳入幾種不同參數,讓使用這更方便,首先不用在import django.urlresolvers.reverse redirect可接受三種不同類別參數 1.物件 傳入若是個物件則預設會去呼叫該模組的get_absolute_url()方法 例 from django.shortcuts import redirect from simple_blog.models import Post def post_view(request,post_id):       post=Post.objetcs,get(pk=post_id)       return redirect(post) 2.reverse url name 這可以取代reverse函數 例 from django.shortcuts import redirect from simple_blog.models import Post def post_view(request,post_id):       return redirect('post_details',id=post_id) 3.絕對或是相對url 例 from django.shortcuts import redirect def relative_url_view(request):       return redirect('/posts/archive/') def absolute_url_view(request):       return redirect('https://simpleblog.com/posts/archive/')