Python 你好, 初次見面!! 10/26 - 11/30

11月 17, 2019 Runa Lee 0 Comments

頁內連結
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),


17編輯 firstproject\myapp\views.py編輯sayhello函式
18. 更新網頁可見       Hello Django!


19. 網址直傳參數 (字串)
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),
]

4. 編輯 youtubeproj\youtubeapp\views.py

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


5.編輯views.py取得一筆資料
 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())




You Might Also Like

0 意見: