Django 开发-安装及配置
Django开发自动化测试平台简介
Django的优点
1:功能完善、要素齐全:自带大量常用工具和框架(比如分页,auth,权限管理), 适合快速开发企业级网站。
2:完善的文档:经过十多年的发展和完善,Django有广泛的实践案例和完善的在线文档。开发者遇到问题时可以搜索在线文档寻求解决方案。
3:强大的数据库访问组件:Django的Model层自带数据库ORM组件,使得开发者无须学习SQL语言即可对数据库进行操作。
4:Django先进的App设计理念: App是可插拔的,是不可多得的思想。不需要了,可以直接删除,对系统整体影响不大。
5:自带台管理系统admin:只需要通过简单的几行配置和代码就可以实现一个完整的后台数据管理控制平台。
6:Django debug信息详尽: 很容易找出代码错误所在。
Django的缺点
1:大包大揽: 对于一些轻量级应用不需要的功能模块Django也包括了,不如Flask轻便。
2:过度封装: 很多类和方法都封装了,直接使用比较简单,但改动起来就比较困难。
3:性能劣势: 与C, C++性能上相比,Django性能偏低,当然这是python的锅,其它python框架在流量上来后会有同样问题。
4:模板问题: django的模板实现了代码和样式完全分离,不允许模板里出现python代码,灵活度对某些程序员来说可能不够。
利用django开发自动化测试平台思想
开发构思:
1:在写平台之前,我们用的都是自动化测试框架,而自动化测试框架对于组员的要求高,需要用代码来写测试用例不易进行推广至全组,而自动化测试平台就可以进行全组推广共同去完成自动化测试的工作,大大提高了效率,节省测试成本;
2、处理接口测试过程的依赖关系:登录信息、接口之间的相互依赖关系;
3、处理接口测试数据来源:导入文件到数据库,手动增加数据或修改数据;
4、测试报告生成:图表统计,数据的筛选;
5、测试灵活性:多条、单条数据自动根据开发提供的结果与实际结果进行校验;
开发环境:
1、后端开发框架:django
2、后台语言:python;
3、前端语言:js、css、html
4、前端框架(bootstrap或者vue)
5、数据库:mysql;
6、架构:面向对象;
平台具备的功能点:
1、数据模板下载;
2、数据模板上传;
3、单条数据提交;
4、查看导入数据的所有信息;
5、测试情况统计;
6、接口数据过滤;
7、接口数据的增删改查;
8、单条多条接口自动化测试校验;
9、接口测试自动获取登录信息,保存登录状态;
10、邮件发送测试报告;
11、执行接口测试;
12、用例执行完成生成html测试报告;
13、测试用例与测试脚本、测试报告绑定;
django MTV模型
M : models,数据库 django 封装了ORM,免于直接操作数据库。
T : templates, 视图 django自带模板语言,可以在HTML中处理数据的展示。
V : views,逻辑 在models和templates之间进行数据处理以及逻辑处理。
Django安装步骤
创建虚拟环境
1> 启动命令行cmd
2> pip3.5 install virtualenv
3> 随便找个地方创建一个文件夹${virtural},命令行来到这个目录-->输入命令
virtualenv ${virtural}
虚拟环境下安装django
1> 命令行来到创建的文件夹里进入到script文件夹内-->输入命令
pip3.5 install -U django==2.1.5
使用pycharm工具创建django项目
1> 启动pycharm程序,创建项目
查看创建好的django项目的目录
配置Django
setting.py配置语言、时间
# Internationalization
# https://docs.djangoproject.com/en/2.1/topics/i18n/
LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_L10N = True
USE_TZ = False
setting.py配置数据库
# Database
# https://docs.djangoproject.com/en/2.1/ref/settings/#databases
DATABASES = {
# 'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
# }
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'db1',
'USER': 'db1',
'PASSWORD': 'db1',
'HOST': 'db1',
'PORT': 'db1',
}
暂时先禁用mysql,使用回sqlite3
打开dj_test目录下的__init__.py文件
插入代码
import pymysql
pymysql.install_as_MySQLdb()
【运行django】
命令行,进入manage.py平级目录,输入命令:
python manage.py runserver
浏览器打开URL:http://127.0.0.1:8000/
创建简单Django项目
dj_test目录下创建一个文件夹static
templates目录下创建HTML文件:index.html
王大锤的小屋欢迎光临
user目录下打开views.py文件
输入代码
from django.shortcuts import render
# Create your views here.
def index(request):
return render(request,'index.html')
在dj_test目录下打开urls.py文件
配置url
from django.contrib import admin
from django.urls import path
from user.views import index
urlpatterns = [
path('admin/', admin.site.urls),
path('index/', index),
]
配置setting.py里的TEMPLATES
不然url加载不出index.html
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR,'templates')],
# os.path.join(BASE_DIR,'templates')没了这句,
# 会显示django.template.exception.TemplateDoesNotExist: index.html
'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',
],
},
},
]
或者换个写法
views.py
from django.shortcuts import render,HttpResponse
# Create your views here.
def index(request):
content = open(r'E:\PycharmProjects\dj_test\templates\index.html',encoding='UTF-8').read()
return HttpResponse(content)
# return render(request,'index.html')
List去下标,渲染到页面
views.py
import datetime
from django.shortcuts import render,HttpResponse
# Create your views here.
def index(request):
# content = open(r'E:\PycharmProjects\dj_test\templates\index.html',encoding='UTF-8').read()
# return HttpResponse(content)
catagories = ['Linux','python','java','首页']
today = datetime.datetime.today()
data = {'nav':catagories,'today':today}
return render(request,'index.html',data)
index.html
王大锤的小屋欢迎光临,今天的日期是{{ today }}
- {{ nav.0 }}
- {{ nav.1 }}
- {{ nav.2 }}
- {{ nav.3 }}
for循环渲染
王大锤的小屋欢迎光临,今天的日期是{{ today }}
- {{ nav.0 }}
- {{ nav.1 }}
- {{ nav.2 }}
- {{ nav.3 }}
{% for n in nav %}
{{ n }}{% endfor %}