創作背景:
在某論壇中下載到一套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中添加模板文件路徑:

TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates'),], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', #添加media路徑 'django.template.context_processors.media', ], }, }, ]
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項目上線部署。