python3+django2 开发易语言网络验证(上)

Posted 雪落忆海

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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项目上线部署。

 

以上是关于python3+django2 开发易语言网络验证(上)的主要内容,如果未能解决你的问题,请参考以下文章

python3+django2 开发易语言网络验证(上)

开发易错点收集

Windows驱动开发易错点总结

易商城系统模式开发易商城系统模式详解

python3.0安装django2.0xadmin

python3.5+django2.0快速入门