1. 程式人生 > >python3+django2 開發易語言網絡驗證(上)

python3+django2 開發易語言網絡驗證(上)

程序 技術 paths client 默認值 格式 width django https

創作背景:

  在某論壇中下載到一套php開發易語言網絡驗證的教程,照著看下來,花了兩天的時間,結果發現教程裏開發的網絡驗證,以及隨著教程一起給學員的源碼,都存在著根本用不了的bug!我想要看看能不能在原本的基礎上修改,卻出現了一大堆坑,不是這兒少個$ ,就是那少個 ; 要不就是哪{}包的不對了,擦,不是說php是世界上最好的語言嗎?怎麽感覺是世界上最坑的語言呢?

  也許因為一般的程序員都是從C啟蒙,進而C++,後又轉Java,忽然見到php,頓時感覺簡單明快,好像見到親人了似的;而我易語言啟蒙,進而學python,連用到JavaScript我都神煩其要弄那麽多花括號,還要聲明變量什麽的,簡直麻煩透頂,更不用提php了,簡直覺得php就是一塊兒被烤化了的牛皮糖,黏黏糊糊,一坨代碼撲過來,總有些邊邊角角bug的弄得你渾身難受。

  於是,我只好怒而用python,祭出django,開發一個易語言網絡驗證嘍!其實這也是被逼無奈,畢竟,php垃圾是垃圾了點,好在開發完了,部署極為簡單,而django項目的上線部署就……一言難盡了。

第一步:常規操作,新建一個django項目並連接mysql數據庫

(下載安裝mysql、下載安裝python3、下載安裝pycharm註冊激活什麽的,在這裏就不贅述了,就當大家都知道了哈)

1.新建數據庫:

  1.打開MySQL Command Line Client (windows 桌面→開始→所有程序→MySQL→MySQL Server5.7 目錄下)

  2.輸入數據庫密碼,進入數據庫,然後敲代碼:

show databases; #看看mysql中已經有的數據庫名,新建的數據庫別起重名了
create database netauth; #創建數據庫 netauth (netauth是數據庫名,可以自定義)

2.新建django項目:

  1.新建django項目:打開pycharm→File→New Preject→Django→取個項目名:netauth→More Settings→取個app名:yanzheng

技術分享圖片

  2.新建靜態文件目錄:static、media、log

  1.新建目錄

技術分享圖片

  2.在settings.py中配置目錄,在settings.py的末尾,找到相關代碼,補全為以下代碼:

STATIC_URL = ‘/static/‘
STATICFILES_DIRS=(os.path.join(BASE_DIR,  ‘static‘),)
TEMPLATE_DIRS = (os.path.join(BASE_DIR,  ‘templates‘),)
MEDIA_URL="/media/"
MEDIA_ROOT=os.path.join(BASE_DIR,"media")

  3.在項目netauth目錄下的urls.py中配置media路徑,增加代碼,補全為:

技術分享圖片
from django.contrib import admin
from django.urls import path

from django.views.static import serve
from netauth.settings import MEDIA_ROOT


urlpatterns = [
    path(‘admin/‘, admin.site.urls),
    #配置上傳文件的訪問處理函數
    path(‘media/<path:path>‘,serve,{‘document_root‘:MEDIA_ROOT}),
]
技術分享圖片

補充:在settings.py中添加模板文件路徑:

技術分享圖片 View Code

  3.建立django項目與mysql數據庫鏈接:

  1.在項目netauth目錄下的__init__.py中加入代碼:

import pymysql
pymysql.install_as_MySQLdb()

  2.settings.py配置文件中找到DATABASE進行改寫:

  

技術分享圖片
DATABASES = {
    ‘default‘: {
        ‘ENGINE‘: ‘django.db.backends.mysql‘,
        ‘NAME‘: "netauth",
        ‘USER‘:‘root‘,
        ‘PASSWORD‘:‘(數據庫密碼)‘,
        ‘HOST‘:"127.0.0.1",
        ‘PORT‘:‘3306‘,
        ‘OPTIONS‘:{‘init_command‘:‘SET default_storage_engine=INNODB;‘}
    }
}
技術分享圖片

  3.打開Terminal 執行更新數據庫的兩條經典的命令:

python manage.py makemigrations

python manage.py migrate

技術分享圖片

  4.在pycharm直觀的管理數據庫(類似於php的phpadmin,然而沒有那麽難用):

1.點擊Database按鈕→點擊+號→點擊MySQL

技術分享圖片

2.輸入數據庫名、數據庫用戶名、數據庫密碼 → 點擊Test Connection 按鈕,提示Successful代表鏈接成功,點擊ok即可!

技術分享圖片

3.查看:再點擊Database→點擊netauth@localhost→點擊netauth 即可看到django自動生成的十張表,可以隨意點擊進去查看,進行增刪操作。

技術分享圖片

   5.建立自定制的用戶表:

1.在yanzheng/models.py中寫代碼:from django.db import models

from django.db import models
from django.contrib.auth.models import AbstractUser
from datetime import datetime
# Create your models here.


class UserProfile(AbstractUser):
    end_time=models.DateTimeField(default=datetime.now, verbose_name=到期時間)

    class Meta:
        verbose_name=用戶信息
        verbose_name_plural=verbose_name
    def __str__(self):
        return self.username

2.在settings.py 中加入代碼:

AUTH_USER_MODEL=yanzheng.UserProfile

3.開始→所有程序→MySQL→ MySQL Server 5.7→ 打開MySQL Command Line Client.exe 輸入密碼,進入操作界面,執行以下命令:

#刪除netauth數據庫,再重建netauth,兩次數據庫名必須一樣
drop database netauth;
create database netauth;

4.回到django項目下,打開Terminal終端,執行經典的更新數據命令:

python manage.py makemigrations
python manage.py migrate

  6.新建超級用戶:

1.打開Terminal終端,執行:

python manage.py createsuperuser

Username:用戶名
Email:郵箱
Password:自定義一個不少於8位的密碼(密碼不顯示的)
Password(again):確認密碼

2.在settings.py找到LANGUAGE_CODE,將相關代碼改為使用中文:

LANGUAGE_CODE = zh-hans

TIME_ZONE = Asia/Shanghai

USE_I18N = True

USE_L10N = True

USE_TZ = False

3.運行django項目:

方法一:點擊pycharm運行按鈕

方法二:執行命令:

python manage.py runserver

運行成功後,只要瀏覽器訪問:http://127.0.0.1:8000/admin就可以來到xadmin的後臺管理界面,通過剛剛創建的超級用戶賬戶密碼就可以登錄。

第二步:安裝配置xadmin

什麽是xadmin:

  網上有很多定義和解釋,基本上都讓不了解xadmin的人看完了更迷糊!既然是解釋,就要讓讀者能一下子明白嘛!

  xadmin在python的領域就相當於php領域的dz論壇和WordPress的高度可定制版後臺!

  更通俗點講,xadmin就像是你的qq空間,但是比qq空間的可定制化高一千倍,能夠方便的管理你的各種數據(類比於你qq空間中的日誌、說說、簽名、照片……)

1.django2下安裝xadmin

1.xadmin的django2下載地址:https://github.com/sshwsfc/xadmin/tree/django2

2.打開地址→確認下載的是django2的,點擊Clone or download→點擊Download ZIP→選擇下載到一個沒有中文的目錄下→點擊下載

技術分享圖片

3.打開Terminal執行安裝命令:

pip install --cache-dir
pip install d:/xadmin-django2.zip

4.安裝一些必要的庫文件:

pip crispy_forms
pip reversion

5.打開settings.py 找到INSTALLED_APPS 追加:

INSTALLED_APPS = [
    django.contrib.admin,
    django.contrib.auth,
    django.contrib.contenttypes,
    django.contrib.sessions,
    django.contrib.messages,
    django.contrib.staticfiles,
    yanzheng.apps.YanzhengConfig,
 #追加代碼:   
    xadmin,
    crispy_forms,
    reversion,
]

6.給urls.py中增加兩行代碼,就算是給xadmin配置路由了:

from django.contrib import admin
from django.urls import path
#引入xadmin
import xadmin

urlpatterns = [
    path(admin/, admin.site.urls),
 #配置xadmin路由   
    path(xadmin/, xadmin.site.urls),
]

7.安裝配置好了,不要忘了更新數據庫,打開Terminal,執行經典的兩條命令:

python manage.py makemigrations
python manage.py migrate

8.重新運行項目,瀏覽器訪問http://127.0.0.1:8000/xadmin/ 即可看到xadmin的登錄界面(上次登錄admin的時候如果沒註銷登出,因為cookie的緣故,會直接出現已經登錄的界面。)

技術分享圖片

技術分享圖片

2.django2下配置xadmin

1.至此成功登錄了,但是由於後面還要自定義一些xadmin的插件(比如一鍵導出生成的卡密插件),所以要將xadmin導入項目中:

1.在項目netauth目錄下,新建apps和extra_apps,將yanzheng拖入apps目錄下。

2.在d盤目錄下找到下載的xadmin-django2.zip,右鍵解壓文件→確定,解壓後的文件夾中,找到xadmin-django2/xadmin-django2目錄下的xadmin文件夾,復制到項目中extra_apps目錄下,註意Search for reference 和Open moved files in editer 都不要勾選!

技術分享圖片

3.extra_apps右鍵→Mark Directory as→Sources Root(對apps目錄也要做同樣的事

技術分享圖片

4.在settings.py 中,找到:BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))),import sys 添加補全代碼為:

import os,sys

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0,os.path.join(BASE_DIR,‘apps‘))
sys.path.insert(1,os.path.join(BASE_DIR,‘extra_apps‘))

.5.打開Terminal終端,卸載最先安裝的xadmin

pip uninstall xadmin
y

不要覺得先安裝,又導入,又卸載,這個過程有什麽可以省略的,一步也不能少,不然掉到坑裏,爬不上來哦。

第三步:數據庫開發

1.在apps/yanzheng/models.py中,將網絡驗證相關的表建完(其實就倆表,還都很簡單):

from django.db import models
from django.contrib.auth.models import AbstractUser
from datetime import datetime
# Create your models here.


class UserProfile(AbstractUser):
    is_ban=models.BooleanField(default=False,verbose_name=是否被禁)
    end_time=models.DateTimeField(default=datetime.now, verbose_name=到期時間)

    class Meta:
        verbose_name=用戶信息
        verbose_name_plural=verbose_name
    def __str__(self):
        return self.username


class Cards(models.Model):

    """充值卡"""
    user=models.ForeignKey(UserProfile,verbose_name=使用者,on_delete=models.CASCADE)
    kacode=models.CharField(max_length=50,verbose_name=卡密,default=‘‘)
    time=models.IntegerField(default=3600,verbose_name=時長)
    is_used=models.BooleanField(default=False,verbose_name=是否已經使用)
    add_time=models.DateTimeField(default=datetime.now,verbose_name=生成時間)
    class Meta:
        verbose_name=卡密
        verbose_name_plural=verbose_name
    def __str__(self):
        return self.kacode

打開Terminal,執行數據更新命令:

python manage.py makemigrations
python manage.py migrate

這裏有一個坑:

  數據更新的時候,如果數據類中,有DateTimeField字段,只能在第一次創建時,數據更新命令能成功,如果已經執行了數據更新命令,再修改DateTimeField字段的默認值,就會時間格式不對的錯誤,很煩人!

  解決辦法:將apps/yanzheng/makemigrations目錄下,除了__init__.py以外的文件都刪掉,再執行數據更新命令,就可以了。

技術分享圖片

  篇幅有限,整套網絡驗證開發教程,我計劃分為三篇來寫:

  第一篇就是今天寫的,服務器端MTV中的MT部分已經寫完;

  第二篇寫服務端的V部分,以及客戶端易語言部分;

  第三篇計劃寫django項目上線部署。

python3+django2 開發易語言網絡驗證(上)