Python 你好, 初次見面!! 10/26 - 11/30
頁內連結10/26
11/09
前一陣子柯文哲說現在的學生有三種語言必學,中文、英文、還有程式語言。剛好知道有這課程的訊息..... 聽阿北的話,開始我的Python 學習, 10/26 初相見!
本篇是課後筆記, 目前的我還在摸黑進行, 只是依樣畫葫蘆, 拿香對拜跟下方連結一口令一動作的過程
http://cheng-min-i-taiwan.blogspot.com/2019/10/djangohello-app.html
1. 下載Python 程式(2019/10/26 Python 3.8.0)
載點: https://www.python.org/downloads/
安裝時別忘了勾選 Add Python 3.8 to PATH
2. 安裝完成後, 從開始列裡可檢視最新安裝的 Python 程式,
在搜尋列輸入 "cmd" -開啟command 視窗
3. command command 視窗執行, 安裝虛擬環境
pip install virtualenvwrapper-win
4. 測試 Python 版本
python --version
5. 建立虛擬環境 first, 執行
mkvirtualenv first
6.安裝Django 執行
pip install django
7..建立第一個Django專案, 執行
django-admin startproject firstproject
8.切換到專案的目錄, 執行
cd firstproject
9.用檔案管理員檢視目錄 firstproject 下有一目錄 firstproject 和檔案 manage.py
再檢視 firstproject /firstproject 內的檔案, 有4個檔案,
10.建立第一支APP, 在 users\usename\firstproject 下執行
python manage.py startapp myapp
執行結果產生目錄myapp
11.查看myapp的目錄及檔案
12.執行資料庫同步指令
python manage.py migrate
13.啟動網站
python manage.py runserver
(預設port是8000, 若在後方加上數字可更換, EX: python manage.py runserver 9000)
14. 開啟瀏覽器連結至
127.0.0.1:8000
15. 安裝APP,使用IDLE打開settings.py
A. 在INSALLED APPS 末端加入 'myapp',
B. 設定 TAMPLATE 路徑 os.path.join(BASE_DIR, 'templates')
C. 設定語言繁體中文 zh-Hant
時區 Asia/Taipei
D. 完成設定後 儲存。
16. 編輯urls.py,新增一個首頁path以及對應到的函式
from myapp.views import sayhello
.
.
path('', sayhello),
18. 更新網頁可見 Hello Django!
19. 網址直傳參數 (字串)
A. 編輯 urls.py 增加sayheelo2函式 路徑
B. 編輯 myapp\views.py 加入sayheelo2函式
C. 頁面執行結果
cd youtubeproj (進入youtubeproj 目錄)
python manage.py startapp youtubeapp (建立youtubeapp)
2. settings.py 設定
編輯 youtubeproj\youtubeproj\setting.py
3.編輯 youtubeproj\youtubeproj\urls.py
4. 編輯 youtubeproj\youtubeapp\views.py
5.建立index,html程式, 置於第一階youtubeproj 目錄下建置templates 目錄 youtubeproj\templates\index.html
6. youtubeproj路徑下執行
3.啟動網站查看結果
python manage.py createsuperuser (建立尸superuser 帳號 admin 密碼 1234 )
python manage.py runserver
3. 127.0.0.1:8000/admin 進入後台,
5.編輯views.py取得一筆資料
6. 網頁測試執行結果 - 檢視 127.0.0.1:8000頁面
A. 編輯 urls.py 增加sayheelo2函式 路徑
B. 編輯 myapp\views.py 加入sayheelo2函式
C. 頁面執行結果
11/2
Python Package Index - 分享的套件包網站
ORM - Python 使用的資料庫方式不同於C使用的 my_sql
ORM - Object Relational Mapping,程式設計技術,用於實現物件導向程式語言裡不同類型系統的資料之間的轉換。 從效果上說,它其實是建立了一個可在程式語言裡使用的「虛擬物件資料庫」
物件導向 - 軟體可以像硬體一樣,做成套件包有共通性,供其它使用者使用
功能導向 - 依廠商需求製作,case by case。
python 資料型式:
今天老師範例連結
11/9 今天安裝Notepad 來編輯程式 Notepad++ 下載
今天建立 youtube 影片的網頁, 建立資料庫, 可新增刪除影片
老師筆記:
影音筆記
一、建立專案和app
mkvirtualenv youtube (建立youtube虛擬環境)
pip install django
django-admin startproject youtubeproj (建立 youtubeproj)cd youtubeproj (進入youtubeproj 目錄)
python manage.py startapp youtubeapp (建立youtubeapp)
2. settings.py 設定
編輯 youtubeproj\youtubeproj\setting.py
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'youtubeapp', #在INSTALLED_APPS加入建立的app...略..
...略..
.TEMPLATES = [
{ 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates')], #設定templates路徑...略..
LANGUAGE_CODE = 'zh-Hant' #設定語言 TIME_ZONE = 'Asia/Taipei' #設定時區...略..
STATIC_URL = '/static/' STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'static'), ]
#設定 static 路徑
3.編輯 youtubeproj\youtubeproj\urls.py
...略..
from django.contrib import admin from django.urls import path from youtubeapp.views import home urlpatterns = [ path('admin/', admin.site.urls), path('', home), ]
from django.shortcuts import render # Create your views here. def home(request): return render(request, 'index.html', locals())
5.建立index,html程式, 置於第一階youtubeproj 目錄下建置templates 目錄 youtubeproj\templates\index.html
<!DOCTYPE html>
<html>
<head>
<title>
影片播放網站
</title>
</head>
<body>
<iframe width="560" height="315"
src="https://www.youtube.com/embed/W40mDCqWyYo"
frameborder="0"
allow="accelerometer;
autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen>
</iframe>
#本段由youtube 分享 -> 嵌入複製程式碼
</body>
</html>
6. youtubeproj路徑下執行
python manage.py makemigrations
python manage.py migrate
python manage.py runserver
7. 檢視網頁
二、設定影片影片大小及連結點改為變數
影片嵌入程式碼是採用iframe的標籤,其主要的參數有width, height, src。
1.修改index.html 中 iframe 中 width, height, src為變數 {{width}}、{{height}}、{{src}}
youtubeproj\templates\index.html
<iframe width="{{width}}" height="{{height}}"
src="https://www.youtube.com/embed/{{src}}"
frameborder="0"
allow="accelerometer;
autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen>
</iframe>
修改iframe 中的寬、高、連結點
2. youtubeproj\youtubeapp\views.py 設定影片的寬、高和連結點
from django.shortcuts import render # Create your views here. def home(request): width=1280 height=720 src = 'W40mDCqWyYo'
#https://www.youtube.com/watch?v=W40mDCqWyYo複製網址中=後方的文字到src內
return render(request, 'index.html', locals())
3.啟動網站查看結果
三、建立資料庫
1. 編輯 youtubeproj\youtubeapp\models.py
from django.contrib import admin
# Register your models here.
class video(models.Model):
name = models.CharField(max_length=50, null=False)
width = models.IntegerField(default = 1280)
height = models.IntegerField(default = 720)
src = models.CharField(max_length=50, null=False)
def _str_(self):
return self.name
2.開啟admin.py撰寫註冊video資料庫到後台管理
1 2 3 4 5 6 | from django.contrib import admin from youtubeapp.models import video # Register your models here. admin.site.register(video) |
執行下列指令,
python manage.py makemigrations (生成同步數據庫的代碼)
python manage.py migrate (同步數據庫-也就是對數據庫執行真正的遷移動作)python manage.py createsuperuser (建立尸superuser 帳號 admin 密碼 1234 )
python manage.py runserver
3. 127.0.0.1:8000/admin 進入後台,
4. 建立第一筆資料 Name : Django
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | from django.shortcuts import render from youtubeapp.models import video # Create your views here. def home(request): try: v = video.objects.get(name="Django") width=v.width height=v.height src = v.src except: print("沒找到") width=1280 height=720 src = 'W40mDCqWyYo' return render(request, 'index.html', locals()) |
6. 網頁測試執行結果 - 檢視 127.0.0.1:8000頁面
四、[ Django ] 影片網站資料庫及後台管理(四) - 讀取所有資料
1.修改views.py程式
1 2 3 4 5 6 7 8 9 10 11 | from django.shortcuts import render from youtubeapp.models import video # Create your views here. def home(request): try: videos = video.objects.all() except: print("沒有任何資料") return render(request, 'index.html', locals()) |
2. 修改index.html
youtubeproj\templates\index.html<!DOCTYPE html>
<html>
<head>
<title>
影片播放網站
</title>
</head>
<body>
{% for video in videos %}
<iframe
width="{{video.width}}"
height="{{video.height}}"
src="https://www.youtube.com/embed/{{video.src}}"
frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen>
</iframe>
{% endfor %}
</body>
</html>
每一次循環中,模板系統會渲染在 {% for %} 和 {% endfor %} 之間的所有內容。
3. 再新增一筆資料
檢視網頁, 目前有兩筆影片
五、[ Django ] 影片網站資料庫及後台管理(四) - 讀取所有資料
1. 在urls.py增加路徑
from django.contrib import admin from django.urls import path from youtubeapp.views import home, post urlpatterns = [
path('admin/', admin.site.urls), path('', home), path('index/', home), path('post/', post)
]
2. views.py 新增post 函式
from django.shortcuts import render, redirect from youtubeapp.models import video
# Create your views here. def home(request): try: videos = video.objects.all() except: print("沒有任何資料") return render(request, 'index.html', locals())def post(request): if request.method == "POST": name = request.POST["videoname"] width = int(request.POST["videowidth"]) height = int(request.POST["videoheight"]) src = request.POST["videosrc"] v = video.objects.create(name=name, width=width, height=height, src=src) v.save return redirect('/index/') return render(request, 'post.html', locals())
3. templates目錄下新增 post.html
<!DOCTYPE html> <html> <head> <title>新增一筆資料</title> </head> <body> <form action="/post/" method = "POST" name = "form1"> {% csrf_token %} <div> 名稱 : <input type="text" name="videoname" /></br> 寬度 : <input type="text" name="videowidth" /></br> 高度 : <input type="text" name="videoheight" /></br> 來源 : <input type="text" name="videosrc" /></br> <input type="submit" name="送出資料" /></br> </div> </form> </body> </html>
4. 啟動 post.html ( 127.0.0.1:8000/post )
5. 新增影片, 並檢視網頁, 可得三影片
六、影片網站資料庫及後台管理(六) - 表單模型化
輸入資料需要驗證,若未驗證容易引起不可遇期的問題發生。本篇文章在於使用Python程式,設計驗證表單。
1.增加驗證表單程式form.py (置於 youtubeappyoutubeapp目錄下)
1 2 3 4 5 6 | from django import forms
class PostForm(forms.Form):
name = forms.CharField(max_length=50, initial='')
width = forms.IntegerField(max_value=1280, min_value=640)
height = forms.IntegerField(max_value=1280, min_value=640)
src = forms.CharField(max_length=50, initial='')
|
2.views.py 增加 postform 函式。
from django.shortcuts import render, redirect
from youtubeapp.models import video
from youtubeapp.form import PostForm
# Create your views here. def home(request): try: videos = video.objects.all() except: print("沒有任何資料") return render(request, 'index.html', locals()) def post(request): if request.method == "POST": name = request.POST["videoname"] width = int(request.POST["videowidth"]) height = int(request.POST["videoheight"]) src = request.POST["videosrc"] v = video.objects.create(name=name, width=width, height=height, src=src) v.save return redirect('/index/') return render(request, 'post.html', locals())
def postform(request):
postform = PostForm()
return render(request, "postform.html", locals())
3. 增加路徑 urls.py
from django.contrib import admin from django.urls import path from youtubeapp.views import home, post, postform urlpatterns = [ path('admin/', admin.site.urls), path('',home), path('index/', home), path('post/', post), path('postform/', postform), ]
4. 製作驗證表單 postform.html
<form action="." method="POST" name="form1">
{% csrf_token%}
{{postform}}
</form>
5. 開啟網頁檢視
6. 右鍵 - 檢查
檢視原始碼
(七) - 新增影片並驗證width, height 只能輸入數字
加入下方連結影片, 並使用驗證表單。
1. 新增 post2.html
<!DOCTYPE html> <html> <head> <title>資料新增並驗證</title> </head> <body> <form action="." method="POST" name="form1"> {% csrf_token%} <table border="1" cellspacing="1" ncellpadding="4"> <tr><th>影片名稱</th><td>{{postform.name}}</td></tr> <tr><th>影片寬度</th><td>{{postform.width}}</td></tr> <tr><th>影片高度</th><td>{{postform.height}}</td></tr> <tr><th>影片來源</th><td>{{postform.src}}</td></tr> </table> <input type="submit" name="button1" id="button1" value="送出"/> <input type="reset" name="button2" id="button2" value="重置"/> </form> </body> </html>
2. urls.py 加入post2 路徑
from django.contrib import admin from django.urls import path from youtubeapp.views import home, post, postform, post2 urlpatterns = [ path('admin/', admin.site.urls), path('',home), path('index/', home), path('post/', post), path('postform/', postform), path('post2/', post2), ]
3. views.py 加入post2 路徑
....略....
def postform(request):
postform = PostForm()
return render(request, "postform.html", locals())
def post2(request):
if request.method == "POST":
postform = PostForm(request.POST)
if postform.is_valid():
name = postform.cleaned_data["name"]
width = int(postform.cleaned_data["width"])
height = int(postform.cleaned_data["height"])
src = postform.cleaned_data["src"]
v = video.objects.create(name=name, width=width, height=height, src=src)
v.save
return redirect('/index/')
else:
print("證驗有誤")
else:
postform = PostForm()
return render(request, 'post2.html', locals())
4. 測試頁面-影片寬度和高度只能輸入數字, 執行加入
5. 開啟網頁檢視
八、影片網站資料庫及後台管理 - 用下拉式選單的方式, 刪除資料
1.新增 delete.html
<!DOCTYPE html> <html> <head> <title>刪除資料</title> </head> <body> <h1>刪除資料</h1> <form action="." method="POST" name="form1"> {% csrf_token%} 請輸入欲刪除的影片名稱: <select name="videoname"> {% for video in videos %} <option value="{{video.name}}">{{video.name}}</option> {% endfor %} </select> <input type="submit" name="button" id="button" value="確定刪除"/> </form> </body> </html>
2. urls.py 加入 delete delete 路徑
from django.contrib import admin from django.urls import path from youtubeapp.views import home, post, postform, post2, delete urlpatterns = [ path('admin/', admin.site.urls), path('',home), path('index/', home), path('post/', post), path('postform/', postform), path('post2/', post2), path('delete/', delete), ]
3. views.py 下方加入delete 函式
....略....
def delete(request): if request.method == "POST": videoname=request.POST['videoname'] try: v = video.objects.get(name=videoname) v.delete() return redirect('/index/') except: print("讀取錯誤") try: videos = video.objects.all() except: print("沒有任何資料") return render(request, "delete.html", locals())
0 意見: