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',
],
},
},
]
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 开发易语言网络验证(中)
第四步:网络验证的逻辑开发 1.将model注册到adminx.py中 1.在apps/yanzheng目录下新建admin.py 文件,添加代码: import xadmin from xadmin ...
- python3+django2 开发易语言网络验证(下)
第六步:网络验证服务器端项目上线部署 功夫不负有心人,终于部署成功啦! 前期准备: 项目名:netauth 系统:百度云服务器下的Ubuntu16.4 软件:xshell(无论如何想办法用这个跟服务器 ...
- Android开发之从网络URL上下载JSON数据
网络下载拉取数据中,json数据是一种格式化的xml数据,非常轻量方便,效率高,体验好等优点,下面就android中如何从给定的url下载json数据给予解析: 主要使用http请求方法,并用到Htt ...
- 执行效率做比较,Go、python、java、c#、delphi、易语言等
比较环境,在win7 64位,比较各种语言的整数型运算,下面的比较只作为单项比较.具体方式,40000*40000遍历相加.为了防止编译器优化,生成一个随机数. 1:c#,在NET2.0框架下作为 ...
- 一网成擒全端涵盖,在不同架构(Intel x86/Apple m1 silicon)不同开发平台(Win10/Win11/Mac/Ubuntu)上安装配置Python3.10开发环境
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_200 时光荏苒,过隙白驹,即将进入2022年,著名敏捷开发语言Python也放出了3.10最终版,本次我们来展示一下在不同的系统和 ...
- 易语言调用csharp写的COM组件的程序在Win2008上奔溃的解决办法
易语言调用csharp写的COM组件,除了要注册csharp写的dll之外(由于是.net代码,需要用.net自带的注册工具RegAsm.exe注册,具体注册方法为: C:\WINDOWS\Micro ...
- 13. Go 语言网络爬虫
Go 语言网络爬虫 本章将完整地展示一个应用程序的设计.编写和简单试用的全过程,从而把前面讲到的所有 Go 知识贯穿起来.在这个过程中,加深对这些知识的记忆和理解,以及再次说明怎样把它们用到实处.由本 ...
- 嵌入式开发—C语言面试题
嵌入式开发—C语言面试题 源地址:http://blog.csdn.net/xdx2ct1314/article/details/7358929 1. 用预处理指令#define 声明一个常数,用 ...
- iOS开发核心语言Objective C —— 全部知识点总结
本分享是面向有意向从事iOS开发的伙伴及苹果产品的发烧友,亦或是已经从事了iOS的开发人员,想进一步提升者.假设您对iOS开发有极高的兴趣,能够与我一起探讨iOS开发.一起学习,共同进步.假设您是零基 ...
随机推荐
- LinuxMint18使用单独分区作为Home挂载点
安装LinuxMint时,我没有为/home选择单独的分区,所以在安装完系统之后就得手动配置一番. 首先是创建一个分区,这个很简单就不说啦. 然后就是把现有的/home下的文件移动到新的分区里面 操作 ...
- 一种dubbo逻辑路由方案(服务化隔离环境)
背景介绍 现在很多的公司都在用dubbo.springcloud做为服务化/微服务的开发框架,服务化之后应用越来越多,链路越来越长,服务环境的治理变的很困难.比如:研发团队的人很多的,同时有几个分支在 ...
- Hive函数:SUM,AVG,MIN,MAX
转自:http://lxw1234.com/archives/2015/04/176.htm,Hive分析窗口函数(一) SUM,AVG,MIN,MAX 之前看到大数据田地有关于max()over(p ...
- filter过滤器与map映射
filter过滤器 >>> list(filter(None,[0,1,2,True,False])) [1, 2, True] filter的作用就是后面的数据按照前面的表达式运算 ...
- Linux查看文件指定某些行的内容
查看从第5行开始的100行内容,并把结果重定向到一个新的文件 cat file | tail -n +5 | head -n 100 > newfile.txt 查看第5行到100行的内容,并把 ...
- springaop——AspectJ不可不知的细节
springaop简介 springaop是spring对AOP技术的具体实现,它是spring框架的核心技术.springaop底层使用JDK动态代理或CGLIB动态代理技术实现. 应用场景: 在多 ...
- C#之winform实现文件拖拽功能
将一个文件拖拽到窗体的某个控件时,将该控件的路径显示在该控件上,只要拿到了路径自然可以读取文件中的内容了 将一个控件的属性AllowDrop设置为true,然后添加DragDrop.DragEnter ...
- [LeetCode] Find K-th Smallest Pair Distance 找第K小的数对儿距离
Given an integer array, return the k-th smallest distance among all the pairs. The distance of a pai ...
- Centos常用命令之:VI
在Linux中,对文件内容的编辑莫过去vi命令了,它是每个发布版本中的标配.并且功能强大. 在vi中一共有三种模式,一般模式(命令参照),编辑模式(命令参照)与命令模式(命令参照). ◇一般模式:当我 ...
- [SCOI2009]围豆豆
Description Input 第一行两个整数N和M,为矩阵的边长. 第二行一个整数D,为豆子的总个数. 第三行包含D个整数V1到VD,分别为每颗豆子的分值. 接着N行有一个N×M的字符矩阵来描述 ...