- 虚拟环境搭建
">首先确定是否安装了vim,没有则安装,有则更新 sudo apt-get install vim #打开.bahsrc 将代码添加到最后一行 sudo vi ~/.bashrc #将下面的内容添加到最后一行,添加完成后重新打开终端 source /usr/share/virtualenvwrapper/virtualenvwrapper.sh #退出保存,vim 底行模式:x #刷新环境 source ~/.bashrc #测试是否正常,输入work 按两下tab键会发现自动补全workon即可,如果没有出现请重复上面的内容 workon- ">创建虚拟环境:mkvirtualenv「项目名字」 #删除虚拟环境:rmvirtualenv 「项目名字」 #进入虚拟环境:workon 「项目名字」 #退出虚拟环境:deavtivate
mkvirtualenv mqtt_server - 安装Django
- https://pypi.tuna.tsinghua.edu.cn/simple Django==2.2 #删除包:pip uninstall 包名
pip list 查看python安装库版本
pip install django==2.2 不要高于这个版本
">pip相关命令 #显示当前包名:pip list #显示扩展包名:pip freeze #安装包:pip install 包名 #安装包:pip install 包名==版本号 #修改软件源 :pip install Django==2.2 -i https://pypi.tuna.tsinghua.edu.cn/simple Django==2.2 #删除包:pip uninstall 包名
pip list 查看python安装库版本
pip install django==2.2 不要高于这个版本 - 进如python解释器执行如下代码 >>> import django >>> django.get_version() ‘2.2’ >>> >>> exit()
- 安装pymysql
- 创建Django工程
">在虚拟环境下执行
django-admin startproject 项目名称
#创建完成后,当前目录下会产生对应得一个目录,可以看到如下内容:
#这是Django给我们提供的一个基础配置,我们可以根据不同的需求去修改不同的文件
#对于修改Python文件来说,PycharmIDE是少不了的,下面继续安装Pycharm工具(河蟹版)- IDE-PyCharm
- 创建应用
- http://pypi.douban.com/simple/ —trusted-host pypi.douban.com
">首先确定安装pythond开发包 sudo apt-get install python3-dev #进入虚拟环境安装mysqlclient,使用豆瓣源 pip install mysqlclient -i http://pypi.douban.com/simple/ —trusted-host pypi.douban.com
浏览器出现以上内容代表搭建成功,如果失败请重复上面的内容。
初步验证已经实现了,下一步就要去定制Django了,通过修改源码和创建app的形式完成我们想要的功能。">进入虚拟环境 zhaolc@zhaolc-virtual-machine:~/demo$ workon myenv #运行服务器 (myenv) zhaolc@zhaolc-virtual-machine:~/demo$ python manage.py runserver
浏览器出现以上内容代表搭建成功,如果失败请重复上面的内容。
初步验证已经实现了,下一步就要去定制Django了,通过修改源码和创建app的形式完成我们想要的功能。- ">执行创建迁移文件动作 (myserver) $ python manage.py makemigrations Migrations for ‘sql_app’: sql_app/migrations/0001_initial.py - Create model UserInfo - Create model DeviceInfo (myserver) $ python manage.py migrate Operations to perform: Apply all migrations: admin, auth, contenttypes, sessions, sql_app Running migrations: Applying contenttypes.0001_initial… OK Applying auth.0001_initial… OK Applying admin.0001_initial… OK Applying admin.0002_logentry_remove_auto_add… OK Applying admin.0003_logentry_add_action_flag_choices… OK Applying contenttypes.0002_remove_content_type_name… OK Applying auth.0002_alter_permission_name_max_length… OK Applying auth.0003_alter_user_email_max_length… OK Applying auth.0004_alter_user_username_opts… OK Applying auth.0005_alter_user_last_login_null… OK Applying auth.0006_require_contenttypes_0002… OK Applying auth.0007_alter_validators_add_error_messages… OK Applying auth.0008_alter_user_username_max_length… OK Applying auth.0009_alter_user_last_name_max_length… OK Applying auth.0010_alter_group_name_max_length… OK Applying auth.0011_update_proxy_permissions… OK Applying sessions.0001_initial… OK Applying sql_app.0001_initial… OK
- ">进入虚拟环境,执行 (myserver) $ python manage.py runserver #默认8000端口 可以自己指定
- 更改语言
- zh-Hans
- 创建密码
- 进入后台管理
- 定制Django界面功能
- 显示首页HTML应用(app)
- ">register/views.py import random import string #获取随机值 def get_random(n=32):#默认参数32,此函数可用于加密和验证码 all_chs = string.digits + string.ascii_letters result = ‘’ for i in range(n): #取随机数 ch = random.choice(all_chs) result += ch return result #hmacSH1加密 def get_hash(key,code,sha): hmac_code = hmac.new(key.encode(), code.encode(), sha) #加密 return hmac_code.hexdigest() #注册方法实现 def register(request): #用户请求 if request.method == ‘GET’: #如果是GET方法,则返回界面,明文。post是加密。 global checknu #使用全局变量 checkNUM = get_random(4) #重新赋值验证码 context = {‘check’:checkNUM} #创建字典 return render(request,’register.html’,context) #返回界面和验证码 #如果不是GET则是POST user = request.POST.get(‘user’) #获取网页信息 pwd = request.POST.get(‘password’) pwd2 = request.POST.get(‘checkpassword’) tel = request.POST.get(‘tel’) company = request.POST.get(‘company’) other = request.POST.get(‘other’) check_index = request.POST.get(‘check’) #判断验证码是否正确 if check_index != checkNUM: return HttpResponse(‘验证码错误’) #查询数据库,该用户是否存在 ret = User_Info.objects.filter(User=user).count() if ret != 0: return HttpResponse(‘用户名已存在’) #判断两次密码是否一致 if pwd != pwd2 : return HttpResponse(‘两次密码输入不一致’) #创建用户对象进行赋值 Create_user = User_Info() Create_user.User = user TempKey = get_random() #获取随机32位值 Create_user.CheckKey = TempKey #计算密码 Create_user.Password = get_hash(TempKey,pwd) #加密密码 Create_user.Company = company Create_user.Tel = tel Create_user.Other = other Create_user.LoginIP = request.META[‘REMOTE_ADDR’] Create_user.RegisterIP = request.META[‘REMOTE_ADDR’] #获取当前用户IP if Create_user.save(): #保存,相当于写数据库 return HttpResponse(‘服务器异常,请重试’) return HttpResponse(‘注册成功’)
- 登录功能实现
- 登录窗口
- ">login下views.py代码如下 from django.http import HttpResponse from django.shortcuts import render from register.models import User_Info from register.views import get_hash def login(request): if request.method == ‘GET’: return render(request,’login.html’) user = request.POST.get(‘user’) password = request.POST.get(‘password’) ret = User_Info.objects.filter(User=user).count() if ret == 0: return HttpResponse(‘用户不存在’) ret = User_Info.objects.get(User=user) pwd = get_hash(ret.CheckKey,password) if ret.Password != pwd: return HttpResponse(‘密码错误’) context = {‘show_user’: user} return render(request,’index_in.html’,context)
- myfifo信息
- createproduct信息
- 在models.py中书写代码 from django.db import models #让自己定义的类去继承django提供的modle类 class UserInfo(models.Model): #类名代表表的名字,成员代表字段的名字 cUser = models.CharField(maxlength=20) #必须使用models提供的类型 cPassword = models.CharField(maxlength=18) cData = models.DateTimeField() def str(self): return self.cUser #在创建一个相互关联的数据库,比如,我当前用户下创建了多个设备,其中就需要多种数据库关联 class DeviceInfo(models.Model): dName = models.CharField(max_length=20) dDescribe = models.CharField(max_length=300) dProductKey = models.CharField(max_length=16) dProductSecret = models.CharField(max_length=16) dCreateData = models.DateTimeField() dUpdateData = models.DateTimeField() dNum = models.IntegerField() dUser = models.ForeignKey(UserInfo, on_delete=models.CASCADE)#关联键 def __str(self): return self.dName
- sql_app/admin.py from djangp.contrlb improt admin from .models improt * admin.site.register(UserInfo) admin.site.register(DeviceInfo)
- Django命令与使用
虚拟环境搭建
安装软件
sudo apt-get install virtualenv sudo apt-get install virtualenvwrapper
sudu apt update
sudo apt install virtualenv
sudo apt install virtualenvwrapper
source virtualenvwrapper.sh
添加变量
vi .bashrc
首先确定是否安装了vim,没有则安装,有则更新 sudo apt-get install vim #打开.bahsrc 将代码添加到最后一行 sudo vi ~/.bashrc #将下面的内容添加到最后一行,添加完成后重新打开终端 source /usr/share/virtualenvwrapper/virtualenvwrapper.sh #退出保存,vim 底行模式:x #刷新环境 source ~/.bashrc #测试是否正常,输入work 按两下tab键会发现自动补全workon即可,如果没有出现请重复上面的内容 workon
创建项目
创建虚拟环境:mkvirtualenv「项目名字」 #删除虚拟环境:rmvirtualenv 「项目名字」 #进入虚拟环境:workon 「项目名字」 #退出虚拟环境:deavtivate
mkvirtualenv mqtt_server
进入项目文件夹
切换项目
删除虚拟环境
deactivate 退出虚拟环境
rmvirtualenv mqtt_server 删除项目
安装Django
pip相关命令 #显示当前包名:pip list #显示扩展包名:pip freeze #安装包:pip install 包名 #安装包:pip install 包名==版本号 #修改软件源 :pip install Django==2.2 -i https://pypi.tuna.tsinghua.edu.cn/simple Django==2.2 #删除包:pip uninstall 包名
pip list 查看python安装库版本
pip install django==2.2 不要高于这个版本
环境影响安装指定版本
进如python解释器执行如下代码 >>> import django >>> django.get_version() ‘2.2’ >>> >>> exit()
pip 国内源
pip 国内源: 阿里云 http://mirrors.aliyun.com/pypi/simple/ 中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/ 豆瓣 http://pypi.douban.com/simple/ 清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/ 中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple/ 然后输入如下命令 包名 指定源 pip install tensorflow -i https://pypi.tuna.tsinghua.edu.cn/simple/
pip install django==2.2 -i https://pypi.tuna.tsinghua.edu.cn/simple Django==2.2
安装pymysql
确认安装成功
创建Django工程
前言:执行之前必须对Django有些了解,了解它的M(模型)V(视图)T(模板)的模式,对于我们开发WEB,每一种功能或者说每一个网页分别都对应一个APP要有一些概念,更深入的了解请在视频中查看。
创建工程命令
在虚拟环境下执行
django-admin startproject 项目名称
#创建完成后,当前目录下会产生对应得一个目录,可以看到如下内容:
#这是Django给我们提供的一个基础配置,我们可以根据不同的需求去修改不同的文件
#对于修改Python文件来说,PycharmIDE是少不了的,下面继续安装Pycharm工具(河蟹版)
IDE-PyCharm
Download-pycharm
集成开发环境(IDE,Integrated Development Environment )是用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面等工具。 集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件服务套。所有具备这一特性的软件或者软件套(组)都可以叫集成开发环境。 如微软的Visual Studio系列,Borland的C++ Builder、Delphi系列等。该程序可以独立运行,也可以和其它程序并用。 IDE多被用于开发HTML应用软件。例如,许多人在设计网站时使用IDE(如HomeSite、DreamWeaver等),因为很多项任务会自动生成。 集成开发环境(IDE)是一种用于构建应用程序的软件,可将常用的开发人员工具合并到单个图形用户界面(GUI)中。 源代码编辑器:一个旨在帮助开发人员轻松编写软件代码的文本编辑器,特色功能包括:视觉提示突出显示语法、特定编程语言的自动补全功能、检查正在编写的代码是否存在错误。 本地构建版本自动化:这些实用工具可以在创建软件的本地构建版本时自动执行简单的可重复任务,如将计算机源代码编译成二进制代码、封装二进制代码、运行自动测试。 调试器:一个用于测试其他程序的程序,它能以图形方式显示原始代码中的错误位置。
链接:https://pan.baidu.com/s/1ind573d4O5I1ANsw7h44wg
提取码:9yl0
解码
ThisCrackLicenseId-{ “licenseId”:”11011”, “licenseeName”:”WeChat”, “assigneeName”:”IT—Pig”, “assigneeEmail”:”1113449881@qq.com”, “licenseRestriction”:””, “checkConcurrentUse”:false, “products”:[ {“code”:”II”,”paidUpTo”:”2099-12-31”}, {“code”:”DM”,”paidUpTo”:”2099-12-31”}, {“code”:”AC”,”paidUpTo”:”2099-12-31”}, {“code”:”RS0”,”paidUpTo”:”2099-12-31”}, {“code”:”WS”,”paidUpTo”:”2099-12-31”}, {“code”:”DPN”,”paidUpTo”:”2099-12-31”}, {“code”:”RC”,”paidUpTo”:”2099-12-31”}, {“code”:”PS”,”paidUpTo”:”2099-12-31”}, {“code”:”DC”,”paidUpTo”:”2099-12-31”}, {“code”:”RM”,”paidUpTo”:”2099-12-31”}, {“code”:”CL”,”paidUpTo”:”2099-12-31”}, {“code”:”PC”,”paidUpTo”:”2099-12-31”} ], “hash”:”2911276/0”, “gracePeriodDays”:7, “autoProlongated”:false}
打开工程
设置字体
打开setting
配置字体
配置数据库
配置数据库
创建应用
index
打开PyCharm
关闭提示
打开文件夹
找到mqtt_server
当前窗口即可
更改数据库
nmap 127.0.0.1
- settings.py文件中,通过DATABASES项目进行数据库设置,默认使用SQLite
- 其他数据库配置文档在上方链接中体现:https://docs.djangoproject.com/en/2.2/ref/settings/#databases
- 根据提示,修改成Mysql数据库
创建应用
进入工程文件夹,运行:python manage.py startapp 「应用名字」
注:安装mysqlclient失败解决办法
首先确定安装pythond开发包 sudo apt-get install python3-dev #进入虚拟环境安装mysqlclient,使用豆瓣源 pip install mysqlclient -i http://pypi.douban.com/simple/ —trusted-host pypi.douban.com
测试搭建是否成功
进入虚拟环境 zhaolc@zhaolc-virtual-machine:~/demo$ workon myenv #运行服务器 (myenv) zhaolc@zhaolc-virtual-machine:~/demo$ python manage.py runserver
浏览器出现以上内容代表搭建成功,如果失败请重复上面的内容。
初步验证已经实现了,下一步就要去定制Django了,通过修改源码和创建app的形式完成我们想要的功能。
进入models.py
表配置Info
进入settings.py
配置APP
- 服务器成功后,需要将写好的app注册进去,操作如下:
生成迁移
生成MySQL语句,创建表的过程。
python manage.py makemigrations 生成迁移(生成数据库语句)
迁移完成报OK
- 注册app后,将数据进行迁移,执行如下代码
执行创建迁移文件动作 (myserver) $ python manage.py makemigrations Migrations for ‘sql_app’: sql_app/migrations/0001_initial.py - Create model UserInfo - Create model DeviceInfo (myserver) $ python manage.py migrate Operations to perform: Apply all migrations: admin, auth, contenttypes, sessions, sql_app Running migrations: Applying contenttypes.0001_initial… OK Applying auth.0001_initial… OK Applying admin.0001_initial… OK Applying admin.0002_logentry_remove_auto_add… OK Applying admin.0003_logentry_add_action_flag_choices… OK Applying contenttypes.0002_remove_content_type_name… OK Applying auth.0002_alter_permission_name_max_length… OK Applying auth.0003_alter_user_email_max_length… OK Applying auth.0004_alter_user_username_opts… OK Applying auth.0005_alter_user_last_login_null… OK Applying auth.0006_require_contenttypes_0002… OK Applying auth.0007_alter_validators_add_error_messages… OK Applying auth.0008_alter_user_username_max_length… OK Applying auth.0009_alter_user_last_name_max_length… OK Applying auth.0010_alter_group_name_max_length… OK Applying auth.0011_update_proxy_permissions… OK Applying sessions.0001_initial… OK Applying sql_app.0001_initial… OK
验证server跑起来
- 代码写好后进行先测试下数据库能否跑起来,启动服务器
进入虚拟环境,执行 (myserver) $ python manage.py runserver #默认8000端口 可以自己指定
网页已经开启
- 进入该网页,显示如下图即,服务器已经正常运行
更改语言
zh-Hans
- 登录后台管理:http://127.0.0.1:8000/admin 输入创建的账号密码进入
创建密码
添加超级管理admin
进入工程文件夹,
- 数据库管理,添加后台超级用户,进行对数据库的管理
(myserver) $ python manage.py createsuperuser #添加超级用户 Username (leave blank to use ‘zhaolc’): admin Email address: admin@admin.com Password: Password (again): The password is too similar to the username. This password is too short. It must contain at least 8 characters. This password is too common. Bypass password validation and create user anyway? [y/N]: y Superuser created successfully. (myserver) $ python manage.py runserver
配置admin.py
包含头
进入后台管理
创建用户
录入用户名
返回列表
return的是用户名
创建设备
绑定用户返回界面
迁移的字段内容
迁移自动生成的数据库
表结构搭建
Django表创建
user_info 用户表 user pwd tle rdatatime logintime IP loginIP ID 用户名 密码 电话 注册时间 登录时间 注册IP 登录IP product_info 产品表 pname type typenode link dateformat authentication describe createtime status ID 产品名称 所属品类 节点类型(直连、网关子设备、网关设备) 连网方式(wifi 以太网 蜂窝) 数据格式 认证方式(设备密钥) 产品描述 productKey ProductSecret 创建时间 状态 topic 服务提供Topic 和 自定义tpoic permission ID topic列表 操作权限 归属用户 device_info 设备表 ID 产品关联 用户关联 设备名字 描述 状态 最后上线时间
用户表user_info
产品表product_Info
topic_Info
设备表device_Info
删除之前的迁移文件
重新迁移文件
迁移时需要停止服务器
提示表中已经有了
清空表并删除表
重新创建管理员
再次运行创建表
添加admin表
运行服务器
创建用户
创建家居
定制Django界面功能
在上面的内容创建index(首页)的应用,接下来完善一下这个应用,访问要有首页的感觉,这里就需要用到模板了,模板其实就是在浏览网页中呈现出来的html,模板的路径也是在settings.py中描述。
删除之前不用的环境
检查虚拟环境
检查安装Virtualenv
创建正式虚拟环境
显示首页HTML应用(app)
如果我们创建了新的应用,就需要在应用列表中去注册应用,相应的位置填写上自己的应用名字:
下图描述了模板的相关信息,通常只需要在项目根目录创建一个template即可。
创建文件夹
html模板
随后网上下载一份html模板(自己写也行)放到这个目录下,这里给大家提供一份网上下载的模板,后期通过这个模板进行更改内容:
链接:https://pan.baidu.com/s/1ceugjspd38ZTZKoMW_pycg
提取码:3krh
拷贝到文件夹
选中文件,拖拽到虚拟机。
执行拷贝命令,cp -rf
模板已经同步
根目录添加模板目录
下面就需要去显示网页的相关内容,在此内容之前,需要自行去了解一下GET方法和POST方法,后面的内容会经常用到,此内容在实验完成后自行学习即可,下面跟着文档的操作:
pycharm环境修改:
编写视图文件
添加用户请求
编辑URL
Alt+Enter导入功能
自动引进包
因用户什么都没有,返回一个首页。管理员登陆的时候返回admin方法。
重新启动服务器
运行服务器测试界面
创建模板文件夹
setings.py 最后一行修改文件所在位置
STATICFILES_DIRS = ( os.path.join(BASE_DIR, ‘static’).replace(‘\‘, ‘/‘), os.path.join(BASE_DIR,).replace(‘\‘, ‘/‘), )
成功界面
注册功能实现(app)
每个标题都添加一个括号app的标识,是因为想让大家记得,每一个界面或者每一个功能就是对应一个app来实现的,现在网站的首页可以展示了,下面来实现注册界面。
#创建app (myenv) zhaolc@zhaolc-virtual-machine:~/demo$ python manage.py startapp register #添加app到settings.py # Application definition INSTALLED_APPS = [ ‘django.contrib.admin’, ‘django.contrib.auth’, ‘django.contrib.contenttypes’, ‘django.contrib.sessions’, ‘django.contrib.messages’, ‘django.contrib.staticfiles’, ‘index’, ‘register’, #每创建一个就要在此 ]
接下来要实现一下对应的url,在浏览器输入127.0.0.1:8000/register时,要进入对应的注册界面,首先在register应用目录下创建一个urls.py,随后在工程目录下的url中添加register的url目标转向,将目标转到register应用中的urls:
#————-工程目录下的urls.py————- from django.contrib import admin from django.urls import path, include from index import views urlpatterns = [ path(‘’, views.index), #对应访问路径127.0.0.1:8000 path(‘register/‘ , include(‘register.urls’)), #将目标转到register应用中的urls,对应访问路径127.0.0.1:8000/register path(‘admin/‘, admin.site.urls),#对应访问路径127.0.0.1:8000/admin ]
#————-register应用目录下的urls.py————- from django.urls import path urlpatterns = [ path(‘’, views.register), #对应的处理方法在views中添加register进行处理 ]
urls.py处理完成之后,需要在视图中进行处理了,当用户访问对应的url时就会触发对应的views中的方法来给用户返回对应的html界面,下面的代码则是register应用中views.py的代码:
注:register.html已经更新到模板网页当中,请自行检查
#————-register应用目录下的views.py————- from django.shortcuts import render def register(request): return render(request,’register.html’) #此前拷贝的html并没有这个界面,需要在次复制进来 # Create your views here.
修改模型
模型其实就是对应的数据库中的内容,在Django中,操作对象即操作数据库,他们之间是一种映射关系,带来的方便就是让我们无需考虑SQL语句,直接操作对象即可,大大减小了数据库管理的复杂度,下面跟我一起把注册功能所需要的数据库内容进行书写。
#说明:将该代码写入到register目录下的models.py中 from django.db import models class UserInfo(models.Model): #创建一个用户类,继承models的Model,对应它会在数据库中生成对应的表 #成员类型,则对应会在表中生成对应的字段 User = models.CharField(maxlength=18) #用户名,字符串类型,最长18 Password = models.CharField(max_length=64) #密码 Tel = models.CharField(max_length=20) #电话 Company = models.CharField(max_length=30) #公司 Other = models.CharField(max_length=300) #其他 #非注册可见数据 CreateData = models.DateTimeField(auto_now=True) #注册日期,自动记录 LoginData = models.DateTimeField(auto_now=True) #登录日期 LoginIP = models.CharField(max_length=16) #登录IP RegisterIP = models.CharField(max_length=16) #注册IP CheckKey = models.CharField(max_length=32) #密钥,后期实现用来密码加密,每个用户都不同 def __str(self): return self.CheckKey #调用该表,返回密钥,当然也可以返回用户名,将CheckKey换成User即可 # Create your models here.
迁移数据
代码编写完成,首先需要将配置的对象生成对应的数据库表以及字段,需要用到两个命令:
#创建迁移数据,创建模型。 (myenv) zhaolc@zhaolc-virtual-machine:~/demo$ python manage.py makemigrations #迁移数据 (myenv) zhaolc@zhaolc-virtual-machine:~/demo$ python manage.py migrate
打开Navicat
创建表成功
此时运行服务器
点击注册,即可出现相应的界面,但是还不能注册,稍后进行注册的代码编写,打开网页成功的同时,也打开下Mysql的管理工具,查看mysql下是否出现了对应的表,并查看是否有对应的字段结构。
注册功能源码:
register/views.py import random import string #获取随机值 def get_random(n=32):#默认参数32,此函数可用于加密和验证码 all_chs = string.digits + string.ascii_letters result = ‘’ for i in range(n): #取随机数 ch = random.choice(all_chs) result += ch return result #hmacSH1加密 def get_hash(key,code,sha): hmac_code = hmac.new(key.encode(), code.encode(), sha) #加密 return hmac_code.hexdigest() #注册方法实现 def register(request): #用户请求 if request.method == ‘GET’: #如果是GET方法,则返回界面,明文。post是加密。 global checknu #使用全局变量 checkNUM = get_random(4) #重新赋值验证码 context = {‘check’:checkNUM} #创建字典 return render(request,’register.html’,context) #返回界面和验证码 #如果不是GET则是POST user = request.POST.get(‘user’) #获取网页信息 pwd = request.POST.get(‘password’) pwd2 = request.POST.get(‘checkpassword’) tel = request.POST.get(‘tel’) company = request.POST.get(‘company’) other = request.POST.get(‘other’) check_index = request.POST.get(‘check’) #判断验证码是否正确 if check_index != checkNUM: return HttpResponse(‘验证码错误’) #查询数据库,该用户是否存在 ret = User_Info.objects.filter(User=user).count() if ret != 0: return HttpResponse(‘用户名已存在’) #判断两次密码是否一致 if pwd != pwd2 : return HttpResponse(‘两次密码输入不一致’) #创建用户对象进行赋值 Create_user = User_Info() Create_user.User = user TempKey = get_random() #获取随机32位值 Create_user.CheckKey = TempKey #计算密码 Create_user.Password = get_hash(TempKey,pwd) #加密密码 Create_user.Company = company Create_user.Tel = tel Create_user.Other = other Create_user.LoginIP = request.META[‘REMOTE_ADDR’] Create_user.RegisterIP = request.META[‘REMOTE_ADDR’] #获取当前用户IP if Create_user.save(): #保存,相当于写数据库 return HttpResponse(‘服务器异常,请重试’) return HttpResponse(‘注册成功’)
实现验证码传参
定义字典
控制启用POST方法
注释csrf
添加csrf_token
支持语法(类似结构体)
调试加密
调试算法
调试加密源码
调试信息
注册成功
登录功能实现
python manage.py startapp login #创建登录app #login目录下创建urls.py填写如下代码: from django.urls import path from login import views urlpatterns = [ path(‘’,views.login) ] #工程setings.py 添加APP名称login #工程urls.py 添加新url
工程setings.py 添加APP名称login
工程urls.py 添加新url
Mqtt_server添加login.urls
登录窗口
login下views.py
login下views.py代码如下 from django.http import HttpResponse from django.shortcuts import render from register.models import User_Info from register.views import get_hash def login(request): if request.method == ‘GET’: return render(request,’login.html’) user = request.POST.get(‘user’) password = request.POST.get(‘password’) ret = User_Info.objects.filter(User=user).count() if ret == 0: return HttpResponse(‘用户不存在’) ret = User_Info.objects.get(User=user) pwd = get_hash(ret.CheckKey,password) if ret.Password != pwd: return HttpResponse(‘密码错误’) context = {‘show_user’: user} return render(request,’index_in.html’,context)
定义登录成功的字典
login代码
实际发送用户信息
myfifo信息
工程添加APP名字
工程添加url
views.py添加url
显示登录用户名字
注意字典
取显示名字
成功显示
服务器添加url
createproduct信息
创建APP
工程添加APP
工程添加url
views.py添加url
确认方法post
确认字典
确认网页传参
返回值
用户名创建产品
服务器添加url
from django.http import HttpResponse from django.shortcuts import render from createproduct.models import Product from device.models import DeviceInfo from register.models import User_Info from topic.models import Topic_Info def myinfo(request): context = {‘show_user’:request.POST.get(‘username’)} ret = User_Info.objects.get(User=request.POST.get(‘username’)) rest = Product.objects.filter(P_User=ret.id).count() if rest == 0: return render(request, ‘myinfo.html’, context) rest = Product.objects.filter(P_User=ret.id) context[‘show_user’] = request.POST.get(‘username’) #用户有多个产品 context[‘list’] = rest return render(request,’myinfo.html’,context) def show(request,id): ret = Product.objects.get(id=id) username = User_Info.objects.get(id=ret.P_User_id) context = {‘show_user’:username.User} context[‘productname’] = ret.P_Name context[‘notetype’] = ret.P_NodeType context[‘type’] = ret.P_Type context[‘link’] = ret.P_Link context[‘dataformat’] = ret.P_DataFormat context[‘authentication’] = ret.P_Authentication context[‘data’] = ret.P_CreateData context[‘status’] = ret.P_Status context[‘productkey’] = ret.P_ProductKey context[‘productsecret’] = ret.P_ProductSecret #查询设备代码 ret = DeviceInfo.objects.filter(D_User_id=ret.P_User_id,D_Product_id=ret.id) # return HttpResponse(username.User) context[‘list_dev’] = ret; return render(request,’mydevice.html’,context) def createdevice(request): context = {‘show_user’:request.POST.get(‘username’)} context[‘productname’] = request.POST.get(‘product’) return render(request,’create_device.html’,context) def creatediviceinfo(request): newDevice = DeviceInfo() newDevice.D_Name = request.POST.get(‘devicename’) newDevice.D_Describe = request.POST.get(‘describe’) ret = Product.objects.get(P_Name=request.POST.get(‘product’)) newDevice.D_Product = ret ret = User_Info.objects.get(User=request.POST.get(‘username’)) newDevice.D_User = ret if newDevice.save(): return HttpResponse(‘Create Device is Fail’) createTopic(newDevice.D_Name,request.POST.get(‘product’),request.POST.get(‘username’),request.POST.get(‘productkey’)) return HttpResponse(‘is ok’) # Create your views here. def createTopic(devicename,productname,user,key): newTopci = Topic_Info() newTopci.T_Name = ‘固件版本’ newTopci.T_Dir = ‘/ota/device/interface/‘ + key + ‘/‘ + devicename + ‘/‘ newTopci.T_Permission = ‘订阅’ ret = Product.objects.get(P_Name=productname) newTopci.T_Product = ret ret = User_Info.objects.get(User=user) newTopci.T_User = ret ret = DeviceInfo.objects.get(D_Name=devicename,D_User_id=ret.id) newTopci.T_Device = ret newTopci.save() #更多功能在此处进行添加即可 def show_dev(request,id): #Get方法返回网页 if request.method == ‘GET’: ret = DeviceInfo.objects.get(id = id) username = User_Info.objects.get(id = ret.D_User_id) context = {‘d_name’:ret.D_Name} context[‘d_stats’] = ret.D_Stats context[‘show_user’] = username.User toptemp = Topic_Info.objects.filter(T_Device_id=id) context[‘list_topic’] = toptemp return render(request,’device_info.html’,context) #POST方法获取from表单填写 newTopic = Topic_Info() newTopic.T_Name = request.POST.get(‘topic_name’) newTopic.T_DataName = request.POST.get(‘t_dataname’) ret = DeviceInfo.objects.get(id=id) ret = Product.objects.get(id=ret.D_Product_id) newTopic.T_Dir = ‘/system/‘ + ret.P_ProductKey + ‘/event/‘ + newTopic.T_DataName newTopic.T_Permission = request.POST.get(‘pe’) newTopic.T_Data = 0 newTopic.T_Device_id = id newTopic.T_Product_id = ret.id newTopic.T_User = User_Info.objects.get(id=ret.P_User_id) if newTopic.save(): return HttpResponse(‘创建失败’) ret = DeviceInfo.objects.get(id=id) username = User_Info.objects.get(id=ret.D_User_id) context = {‘d_name’: ret.D_Name} context[‘d_stats’] = ret.D_Stats context[‘show_user’] = username.User toptemp = Topic_Info.objects.filter(T_Device_id=id) context[‘list_topic’] = toptemp return render(request, ‘device_info.html’, context)<br />
- 数据库定义在models.py中直接书写class即可,相关联的数据库和SQL语句它会在执行的时候自动帮我们创建
在models.py中书写代码 from django.db import models #让自己定义的类去继承django提供的modle类 class UserInfo(models.Model): #类名代表表的名字,成员代表字段的名字 cUser = models.CharField(maxlength=20) #必须使用models提供的类型 cPassword = models.CharField(maxlength=18) cData = models.DateTimeField() def str(self): return self.cUser #在创建一个相互关联的数据库,比如,我当前用户下创建了多个设备,其中就需要多种数据库关联 class DeviceInfo(models.Model): dName = models.CharField(max_length=20) dDescribe = models.CharField(max_length=300) dProductKey = models.CharField(max_length=16) dProductSecret = models.CharField(max_length=16) dCreateData = models.DateTimeField() dUpdateData = models.DateTimeField() dNum = models.IntegerField() dUser = models.ForeignKey(UserInfo, on_delete=models.CASCADE)#关联键 def __str(self): return self.dName
- 像admin注册数据库模型,应用目录下admin.py修改
sql_app/admin.py from djangp.contrlb improt admin from .models improt * admin.site.register(UserInfo) admin.site.register(DeviceInfo)
- 登录后台管理:http://127.0.0.1:8000/admin 输入创建的账号密码进入
Django命令与使用
创建项目:
python manmage.py startproject 「项目名字」
#会在当前目录下产生一个项目的文件夹,并且提供基础功能
创建应用
python manage.py startapp 「应用名字」
python manage.py runserver 启动服务
python manage.py makemigrations 生成迁移(生成数据库语句)
sudo apt-get install php7.4
php -v
sudo apt-get install libapache2-mod-php7.4
nodejs 需要安装npm
sudo npm install mysql
[
](?language=en-us)