Tag: python

  • Django – OAuth Test Sample

    An OAuth sample code base on Django.

    Django Commands

    • pip3 install django djangorestframework django-oauth-toolkit
    • django-admin startproject oauth_test
    • cd oauth_test
    • python3 manage.py startapp test_app
    • python3 manage.py makemigrations
    • python3 manage.py migrate
    • python3 manage.py createsuperuser
    • python3 manage.py runserver
    • We can test by using Postman application.

    Setup OAuth in project’s admin management site

    • Default site url: http://127.0.0.1:8000/admin
    • Attention! The Client secret need save copy on create step! After creating, the Client secret field only shows the hashed client secret not original. (We need use the original client secret for auth)

    Project Structure

    Project Structure

    .\oauth_test\settings.py

    .\oauth_test\urls.py

    .\test_app\apps.py

    .\test_app\models.py

    .\test_app\serializers.py

    .\test_app\views.py

    .\test_app\urls.py

    Postman Test for get auth – Post

    Use the original Client secret.

    Postman Test for use auth – Get

  • Python mouse bot 滑鼠機器人小程式

    讓透過使用者預先定義的動作,操作滑鼠。

    program.py (使用 pyautogui)

    import pyautogui
    import time
     
    # 讀取設定檔案
    with open("settings.txt", "r") as settings_file:
        lines = settings_file.readlines()
     
    # 解析每一行指令
    for line in lines:
        # 移動到指定位置
        if line.startswith("moveTo"):
            _, x, y = line.split()
            pyautogui.moveTo(int(x), int(y), 0.5)
        # 點擊
        elif line.startswith("click"):
            if "right" in line:
                pyautogui.click(button="right")
            elif "left" in line:
                pyautogui.click()
                
        time.sleep(0.1)  # 等待100毫秒
     
    # 執行完畢
    print("指令已執行完畢!")

    settings.txt 使用者自行定義的動作檔案

    moveTo 300 200
    click right
    moveTo 230 140
    click left
    click left

    包成 .exe 執行檔(若目標執行環境為windows 7 請用 Python 3.8)

    pip install pyinstaller
    pyinstaller --onefile program.py
  • Python Environment Tips

    使用 Python 首要注意的就是版本選擇。目前最新穩定的版本為 3.12.0,其中,大版本已維持多年,小版本則約半年到一年進行更新,主要著重於性能和安全性的提升。

    若選擇使用的版本太新,往往一堆套件還無法支援,導致程式無法運作。在 2023/11/26 的當下,推薦使用 Python 3.11 是相對通行且套件支援度高又不會太舊的版本,如 Stable Diffusion 等 AI 應用需要的 PyTorch 套件尚不支援 Python 3.12。如果再保守一點可以選擇 Python 3.10,套件的支援度和穩定度會更高些。

    同樣的,各套件可能也會限定其引用其他套件的版本,以避免版本更新,導致因不相容而無法運行。

    補充:目前大部分 AI 相關的套件,仍使用 NVidia 繪圖晶片專屬的 CUDA 語言開發,故包含 Stable Diffusion 等應用都必須要有該硬體才能獲得最大效能。(用DirectML能跑但性能不及CUDA)

    由於 Python 的套件眾多且對版本的卡控較為嚴檢,故會建立需求清單來管理程式運行所需要的套件,並透過虛擬環境的方式來指定使用的Python版本,並確保開發與最終部署環境的一致。以下以Windows的命令提示字元來進行操作:

    • 套件需求清單 requirements.txt
      • 以當前環境建立套件清單:
        pip freeze > requirements.txt
      • 用套件清單安裝環境:
        pip install -r requirements.txt
      • 若擔心要部署環境無法線上下載需要的套件,也可建立 .whl 離線安裝包
        • 建立 .whl 離線安裝包:
          pip wheel -w wheels -r packages.txt
        • 用離線安裝包安裝套件:
          pip wheel -w wheels -r packages.txt
    • Python Virtual Environment (venv)
      • 建立虛擬環境
        • 進入要建立虛擬環境的目錄中並輸入:
          python -m venv {虛擬環境名稱}
        • 完成後,系統會以環境預設的Python版本,在目錄中新建一個以虛擬環境名稱命名的目錄
        • 也可指定Python版本建立虛擬環境:
          C:\Python\Python310\python.exe -m venv {虛擬環境名稱}
      • 啟動虛擬環境
        • 切換到虛擬環境的目錄後輸入:
          cd venv\scripts
          activate
        • 這時dos提示符前面會出現當前虛擬環境的名稱
      • 遷移虛擬環境
        • 啟動虛擬環境後,建立套件清單(也可直接建立離線安裝包):
          pip freeze -l > requirements.txt
        • 複製整個虛擬環境的目錄到新的主機 在新主機中啟用虛擬環境後,從txt檔中安裝套裝:
          pip install -r requirements.txt
  • ChatGPT寫Windows 95序號產生器

    ChatGPT寫Windows 95序號產生器

    最近看到有國外的YouTuber (https://www.youtube.com/watch?v=2bTXbujbsVk ) 叫ChatGPT產生Windows 95序號的玩法,但是成功機率不高,老是算錯。

    我也試著對ChatGPT(3.5)發出一樣的提示,結果也差不多,算對的機率不高。

    Prompt:

    請幫我依據以下格式計算出20碼字,
    dddYY-OEM-zznnnnn-mmmmm
    透過'-'可分成4組字碼
    第1組數5碼,ddd為一年中的第1天到第366天,意即001~366;YY為西元1995年到2003年,意即95~03
    第2組3碼,固定為英文字母OEM
    第3組7碼,zz固定為"00",nnnnn為5個各別的數字,這各別的數字加總除以7的餘數為0,例如1+2+3+4+4除以7的餘數為0
    第4組數5碼,mmmmm為任意5個數字
    以上,請產出10組序號

    為了嘗試一探究,我將產出改成Python程式碼

    Prompt:

    請幫我依據以下格式計算出20碼字,
    dddYY-OEM-zznnnnn-mmmmm
    透過'-'可分成4組字碼
    第1組數5碼,ddd為一年中的第1天到第366天,意即001~366;YY為西元1995年到2003年,意即95~03
    第2組3碼,固定為英文字母OEM
    第3組7碼,zz固定為"00",nnnnn為5個各別的數字,這各別的數字加總除以7的餘數為0,例如1+2+3+4+4除以7的餘數為0
    第4組數5碼,mmmmm為任意5個數字
    以上,請產出對應的Python程式

    發現程式碼看起來好像OK,但執行結果更慘。雖然執行不會報錯,但除了序號長度不正確外,有的字組還直接不見。

    仔細查看Code才發現裡面有一些指令用錯的邏輯bugs.

    以這次產生的Code為例,
    第1組年份碼應為2碼,但因用了補0的zfill()指令,導致產出的為2~3碼;
    第3組的5個數字直接不見,是因為計算加總的變數初始值為0,跟退出迴圈的判斷式相符,導致產出5個數字的迴圈完全沒執行。

    經過人為的修正後,才終於產出正確的序號。

    同樣的問題我問了基於ChatGPT 4的Bing(精確模式)

    雖然答出來的程式碼一樣可以執行且已經沒有整串字不見的狀況,但是還是有第1組年分碼長度不正確的錯誤。看來至少人腦目前還是有發揮的餘地 XD。

  • PyCharm-字體調整

    PyCharm(Python IDE) Windows版預設的12號字體看起來真的有點小,建議可以循以下路徑調整之:

    File -> Settings -> Editor -> Font

  • CentOS 7-Install Python 3, Django 2, uwsgi, nginx

    以root身份依序執行以下指令:

    yum -y install epel-release
    yum -y install python36 python36-tools python36-libs python36-devel wget gcc gcc-c++ zlib* openssl-devel unixODBC-devel
    yum -y install uwsgi
    
    wget https://bootstrap.pypa.io/get-pip.py --no-check-certificate
    python36 get-pip.py
    pip install django
    pip install django-pyodbc-azure
    
    firewall-cmd --zone=public --add-service=http --permanent
    systemctl enable nginx
  • Python-Django connect to MS SQL Server

    Use django-pyodbc-azure:

    pip install django-pyodbc
    pip install django-pyodbc-azure

    Microsoft recommend solution for Python connect to SQL Server: pyodbc

    Settings.py:

    DATABASES = 
        'default': {
            'NAME': 'guest',
            'ENGINE': 'sql_server.pyodbc',
            'HOST': '127.0.0.1',
            'USER': 'sa',
            'PASSWORD': 'brassaikao.idv.tw',
            'PORT': '1433',
            'OPTIONS': {
                'driver': 'ODBC Driver 17 for SQL Server',
            },
        }
    }