var tag = document.createElement('div');
var img = document.createElement('img');
img.setAttribute('class','bobo')
tag.appendChild(img);
document.getElementById("mydiv").appendChild(tag);
Checkthis's Notes
2017年11月30日 星期四
2017年11月25日 星期六
Django - Display Foreign Key object Fields at Admin Interface
# admin.py
class TaskDetailAdmin(admin.ModelAdmin):
list_display = ['get_name']
def get_name(self, obj):
return obj.user.last_name
admin.site.register(models.Task, TaskAdmin)
2017年11月22日 星期三
Django - 分頁
from django.core.paginator import Paginator
reference:https://docs.djangoproject.com/en/1.11/topics/pagination/
Django - 設定User Model 顯示
#models.py
def get_name(self):
return '{} {}'.format(self.last_name, self.first_name)
User.add_to_class("__str__", get_name)
def get_name(self):
return '{} {}'.format(self.last_name, self.first_name)
User.add_to_class("__str__", get_name)
2017年11月17日 星期五
Django - Message
此筆記將紀錄如何使用Django Message 功能
參考資料:https://docs.djangoproject.com/en/1.11/ref/contrib/messages/
設定預設Tag
# settigns.py
from django.contrib.messages import constants as messages
MESSAGE_TAGS = {
messages.INFO: '',
50: 'critical',
}
# views.py
from django.contrib import messages
messages.add_message(request, messages.INFO, 'Hello world.')
# template
{% if messages %}
{% for message in messages %}
<p {% if message.tags %} class="bg-{{ message.tags }}"{% endif %}>{{ message }}</p>
{% endfor %}
{% endif %}
各種TAG
messages.debug(request, '%s SQL statements were executed.' % count) messages.info(request, 'Three credits remain in your account.') messages.success(request, 'Profile details updated.') messages.warning(request, 'Your account expires in three days.') messages.error(request, 'Document deleted.')
客制level
剛剛設定預設Tag的 50 = critical
def my_view(request): messages.add_message(request, 50, 'A serious error occurred.')
2017年11月13日 星期一
Python - DataTime筆記
from datetime import date
取得日期
t = date.today()
轉換字串
t.strftime('%Y%m%d') # 20171114
轉成TUPLE
tt = t.timetuple()
使用localtime()取得時間跟日期
import time
time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
取得日期
t = date.today()
轉換字串
t.strftime('%Y%m%d') # 20171114
轉成TUPLE
tt = t.timetuple()
使用localtime()取得時間跟日期
import time
time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
Python - CSV筆記
參考:https://docs.python.org/3.6/library/csv.html
第一碼:
r -讀取
w - 檔案存在與否,均可寫入
x - 檔案不存在時,寫入
a - 檔案存在時,寫入結尾
第二碼:
t - 文字
b - 二進位
讀取
import csv
with open('eggs.csv', newline='') as csvfile:
spamreader = csv.reader(csvfile, delimiter=',', quotechar=',')
for row in spamreader:
print(', '.join(row))
csvinstance轉換成串列
lists = []
for row in csv_instance:
lists.append(row)
寫入
import csv
with open('eggs.csv', 'w', newline='') as csvfile:
spamwriter = csv.writer(csvfile, delimiter=',', quotechar=',', quoting=csv.QUOTE_MINIMAL)
spamwriter.writerow(['001','002','003'])
如果要使用絕對路徑backslash 改成 common slash
c:\123\ to c:/123/
c:\123\ to c:/123/
2017年11月11日 星期六
Django - 語系更改
以輸入中文為例:
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
LANGUAGE_CODE = 'zh-hant' # Django 1.9之前zh-TW
TIME_ZONE = 'Asia/Taipei'
2017年11月10日 星期五
Django - 客製Admin
1. 修改Admin Title
取得admin templates,參考以下連結,複製內容貼在剛剛新增的base_site.html
新增admin資料夾至templates資料夾並新增base_site.html
https://github.com/django/django
django/contrib/admin/templates/admin/base_site.html
{% extends "admin/base.html" %}
{% block title %}{{ title }} | {{ site_title|default:_('Django site admin') }}{% endblock %}
{% block branding %}
<h1 id="site-name"><a href="{% url 'admin:index' %}">{{ site_header|default:_('派工系統後台') }}</a></h1>
{% endblock %}
{% block nav-global %}{% endblock %}
2.客制Admin ListView
首先新增一個class名字為model+admin
# admin.py
from django.contrib import admin
from . import models
class SchoolAdmin(admin.ModelAdmin):
記得將新增的class註冊到admin
admin.site.register(models.School, SchoolAdmin)
如要設定只需要override以下ModelAdmin變數
設定ListView欄位名稱排序
fields = ['field1','field2','field3'] # 左至右
設定ListView搜尋功能
設定ListView Filter
list_filter = ['field1','field2']
設定ListView顯示欄位
list_display = ['field1','field2']
設定ListView欄位編輯
list_editable = ['field1','field2']
2.客制Admin ListView
首先新增一個class名字為model+admin
# admin.py
from django.contrib import admin
from . import models
class SchoolAdmin(admin.ModelAdmin):
記得將新增的class註冊到admin
admin.site.register(models.School, SchoolAdmin)
如要設定只需要override以下ModelAdmin變數
設定ListView欄位名稱排序
fields = ['field1','field2','field3'] # 左至右
設定ListView搜尋功能
search_fields = ['field1','field2'] # 如此field1, field2都可以搜尋到
設定ListView Filter
list_filter = ['field1','field2']
設定ListView顯示欄位
list_display = ['field1','field2']
設定ListView欄位編輯
list_editable = ['field1','field2']
Django - Dynamic URL
# views.py
from django.shortcuts import render
from .models import Post
def post_detail(request, pk):
post = Post.objects.get(pk=pk)
return render(request, 'post.html', {'post': post})
# urls.py
url(r'^post/(?P<pk>\d+)/$', post_detail, name='post_detail'),
url(r'^send_message/(?P<user_id>[\w]+)/(?P<text>\w+)/$', views.send_message, name="send_message"),
from django.shortcuts import render
from .models import Post
def post_detail(request, pk):
post = Post.objects.get(pk=pk)
return render(request, 'post.html', {'post': post})
# urls.py
url(r'^post/(?P<pk>\d+)/$', post_detail, name='post_detail'),
url(r'^send_message/(?P<user_id>[\w]+)/(?P<text>\w+)/$', views.send_message, name="send_message"),
2017年11月9日 星期四
Django - Line Message API 筆記
from django.conf import settings
from django.http import HttpResponse, HttpResponseBadRequest, HttpResponseForbidden
from django.views.decorators.csrf import csrf_exempt
from linebot import LineBotApi, WebhookHandler
from linebot.exceptions import InvalidSignatureError, LineBotApiError
from linebot.models import MessageEvent, TextSendMessage, TextMessage, FollowEvent
line_bot_api = LineBotApi('Channel access token')
handler = WebhookHandler('Channel secret')
# member_ids_res = line_bot_api.get_group_member_ids(group_id)
@handler.add(MessageEvent, message=TextMessage)
def handle_text_message(event):
# print('room_id: {}'.format(event.room_id))
print('text: {}'.format(event.message.text))
text =event.message.text.lower()
user = event.source.user_id
print('user_id: {}'.format(user))
line_bot_api.reply_message(
event.reply_token,
TextSendMessage(text=user)
)
@handler.add(FollowEvent)
def handle_follow(event):
line_bot_api.reply_message(
event.reply_token,
TextSendMessage(text='感謝這位兄長加我')
)
@handler.default()
def default(event):
print(event)
line_bot_api.reply_message(
event.reply_token,
TextSendMessage(text='Currently Not Support None Text Message')
)
@csrf_exempt
def callback(request):
if request.method == 'POST':
signature = request.META['HTTP_X_LINE_SIGNATURE']
body = request.body.decode('utf-8')
try:
handler.handle(body, signature)
except InvalidSignatureError:
return HttpResponseForbidden()
except LineBotApiError:
return HttpResponseBadRequest()
return HttpResponse()
else:
return HttpResponseBadRequest()
def send_message(request):
line_bot_api.multicast(['to1', 'to2','to3'], TextSendMessage(text='各位都是帥哥!'))
# line_bot_api.push_message('to1', TextSendMessage(text='Hello World!'))
return HttpResponse()
from django.http import HttpResponse, HttpResponseBadRequest, HttpResponseForbidden
from django.views.decorators.csrf import csrf_exempt
from linebot import LineBotApi, WebhookHandler
from linebot.exceptions import InvalidSignatureError, LineBotApiError
from linebot.models import MessageEvent, TextSendMessage, TextMessage, FollowEvent
line_bot_api = LineBotApi('Channel access token')
handler = WebhookHandler('Channel secret')
# member_ids_res = line_bot_api.get_group_member_ids(group_id)
@handler.add(MessageEvent, message=TextMessage)
def handle_text_message(event):
# print('room_id: {}'.format(event.room_id))
print('text: {}'.format(event.message.text))
text =event.message.text.lower()
user = event.source.user_id
print('user_id: {}'.format(user))
line_bot_api.reply_message(
event.reply_token,
TextSendMessage(text=user)
)
@handler.add(FollowEvent)
def handle_follow(event):
line_bot_api.reply_message(
event.reply_token,
TextSendMessage(text='感謝這位兄長加我')
)
@handler.default()
def default(event):
print(event)
line_bot_api.reply_message(
event.reply_token,
TextSendMessage(text='Currently Not Support None Text Message')
)
@csrf_exempt
def callback(request):
if request.method == 'POST':
signature = request.META['HTTP_X_LINE_SIGNATURE']
body = request.body.decode('utf-8')
try:
handler.handle(body, signature)
except InvalidSignatureError:
return HttpResponseForbidden()
except LineBotApiError:
return HttpResponseBadRequest()
return HttpResponse()
else:
return HttpResponseBadRequest()
def send_message(request):
line_bot_api.multicast(['to1', 'to2','to3'], TextSendMessage(text='各位都是帥哥!'))
# line_bot_api.push_message('to1', TextSendMessage(text='Hello World!'))
return HttpResponse()
Django - CBV筆記
之前這筆記都是使用FBV(Function Based Views),以下與CBV(Class Based Views)做對照:
#FBC
def index(request):
return render(request, 'index.html')
#CBV
class IndexView(TemplateView):
template_name = 'index.html'
快速體驗CBV
# views.py
#FBC
def index(request):
return render(request, 'index.html')
#CBV
class IndexView(TemplateView):
template_name = 'index.html'
快速體驗CBV
# views.py
from django.views.generic import View
class CBView(View):
def get(self, request):
return HttpResponse('Class Based View are Cool!')
# urls.py
from basic_app import views
url(r'^$', views.CBView.as_view()),
TemplateView應用
from django.views.generic import TemplateView
context = super(IndexView, self).get_context_data(**kwargs)
context['injectme'] = 'Basic Injection!'
return context
#urls.py
url(r'^$', views.IndexView.as_view()),
from django.views.generic import ListView
class SchoolListView(ListView):
context_object_name = 'schools' # 沒有使用context_object_name django將預設成 school_list
model = models.School
DetailView應用
class SchoolDetailView(DetailView):
context_object_name = 'school_detail' # 未設定
model = models.School
template_name = 'basic_app/school_detail.html'
CreateView應用
class SchoolCreateView(CreateView):
fields = ('name', 'principal', 'location')
model = models.School
之後要記得去School Model 加上get_absolute_url設定轉換的頁面
url(r'^create/$', views.SchoolCreateView.as_view(), name='create'),
UpdateView應用
class SchoolUpdateView(UpdateView):
fields = ('name','principal')
model = models.School
url(r'^update/(?P<pk>\d+)/$', views.SchoolUpdateView.as_view(),name='update'),
DeleteView應用
TemplateView應用
from django.views.generic import TemplateView
# views.py
class IndexView(TemplateView):
template_name = 'index.html'
# for injection
def get_context_data(self,**kwargs): # 雙*代表字典,單*代表Tupletemplate_name = 'index.html'
# for injection
context = super(IndexView, self).get_context_data(**kwargs)
context['injectme'] = 'Basic Injection!'
return context
url(r'^$', views.IndexView.as_view()),
ListView應用
from django.views.generic import ListView
class SchoolListView(ListView):
context_object_name = 'schools' # 沒有使用context_object_name django將預設成 school_list
model = models.School
DetailView應用
from django.views.generic import DetailView
class SchoolDetailView(DetailView):
context_object_name = 'school_detail' # 未設定
model = models.School
template_name = 'basic_app/school_detail.html'
url(r'^(?P<pk>\d+)/$', views.SchoolDetailView.as_view(),name='detail'),
CreateView應用
class SchoolCreateView(CreateView):
fields = ('name', 'principal', 'location')
model = models.School
之後要記得去School Model 加上get_absolute_url設定轉換的頁面
url(r'^create/$', views.SchoolCreateView.as_view(), name='create'),
UpdateView應用
class SchoolUpdateView(UpdateView):
fields = ('name','principal')
model = models.School
url(r'^update/(?P<pk>\d+)/$', views.SchoolUpdateView.as_view(),name='update'),
DeleteView應用
訂閱:
文章 (Atom)