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


創作背景:

  在某論壇中下載到一套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',
            ],
        },
    },
]
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項目上線部署。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM