导读:很多朋友问到关于Django如何判断网络断开的相关问题,本文首席CTO笔记就来为大家做个详细解答,供大家参考,希望对大家有所帮助!一起来看看吧!
django java
django java是什么,让我们一起了解一下?
Django正是一个由Python编写的网络框架,可以给开发者们带来便利快速开发你的网站。现在国内有很多大型网站都是使用的Django这个框架,它能够承受高并发。同时,该框架本身就自带了网络安全服务。
当然,你可能听说过MVC,即 Model View Controller 。但在Django这里,你需要知道的是MVT,Models View Templates(模型视图模板)。
1、URLs: 虽然可以通过单个功能来处理来自每个URL的请求,但是编写单独的视图函数来处理每个资源是更加可维护的。URL映射器用于根据请求URL将HTTP请求重定向到相应的视图。URL映射器还可以匹配出现在URL中的字符串或数字的特定模式,并将其作为数据传递给视图功能。
2、View: 视图 是一个请求处理函数,它接收HTTP请求并返回HTTP响应。视图通过模型访问满足请求所需的数据,并将响应的格式委托给 模板。
3、Models: 模型 是定义应用程序数据结构的Python对象,并提供在数据库中管理(添加,修改,删除)和查询记录的机制。
4、Templates: 模板 是定义文件(例如HTML页面)的结构或布局的文本文件,用于表示实际内容的占位符。一个视图可以使用HTML模板,从数据填充它动态地创建一个HTML页面模型。可以使用模板来定义任何类型的文件的结构; 并不一定是HTML!(可以是html文件,例如index.html)动态加载到html文件里面数据:
具体操作如下:
{% if youngest_teams %} {% for team in youngest_teams %} {{ team.team_name }} {% endfor %} {% else %}
No teams are available.
{% endif %}
自然,在多个操作系统都可以安装Django。如果是在Windows上,你就要先安装Python环境,再进行安装Django。如果是在Linux上,则可直接安装Django,因为Linux本身带的有python。
django框架可以打开默认端口号打不开网页
1.打开cmd,输入ping localhost,查看是否正常。2.进入控制面板--系统和安全--防火墙,最简单的方法是选择恢复默认值。3.若第二步后仍无法打开页面,同时是使用pycharm编译器编译的,查看“运行应用通过Windows防火墙”这一项里面有没有pycharm,没有的话添加进去。4.若仍然不行,关闭防火墙,看能否打开页面,可以的话,再打开防火墙。
产品测试中,如何模拟网络不佳的情况?
1. 前言
下面将描述怎么用最快和最低成本搭建一个ATC服务来构造一个弱网络wifi,然后使用自研的PC工具“网络分析大师”来快捷地切换不同的弱网络场景,免去配置ATC弱网络参数的繁杂。
1.1 安装程序
包括:
1. Vmware Workstation虚拟机
2. Ubuntu 14.04操作系统虚拟机镜像vmdk
3. Ubuntu 14.04操作系统iso-64位
4.网络分析大师
1.2 网络环境
需要使用体验网或外网
1.3 硬件要求
一台PC,一块无线网卡(建议如下的带多天线的PCI网卡,亲测半层楼无遮挡可以满格信号)
2. Ubuntu安装
Ubuntu(乌班图)是一个以桌面应用为主的Linux操作系统 , 弱网络应用的ATC将搭载在其上,所以要现行安装。
2.1 虚拟机or双系统
虚拟机装起来略为方便,因为提供的虚拟机镜像已经装好了整个环境,只需要启动ATC就可以了。
但是虚拟机没有双系统稳定,还是建议做双系统,直接把Ubuntu装起来,然后再安装python 2.7+和Django 1.7+
2.2 虚拟机安装
安装Vmware Workstation,同时直接加载服务器上提供的Ubuntu操作系统虚拟机镜像vmdk即可
2.3 双系统安装
如果需要下载32位的Ubuntu安装镜像,可去官网:
Download Ubuntu Desktop
3. Ubuntu wifi 热点创建
最终我们的测试手机将连上Ubuntu的wifi热点来接入弱网络环境。
Ubuntu的环境下有多种创建热点的方式,自己也尝试过不同的方法,有的方法可以创建成功,但Android系统无法找到,有的根本就无法创建成功,最终选择了一个linux系统安装软件的方式来尝试,成功创建并启动。把这最简单的方法备份一下。
3.1 选择Ubuntu版本,更新软件源
这里选择的ubuntu版本为稳定的14.04版本,若选择最新的15.04版本,可能会存在无相应的软件源。当然,如果你能找到对应的软件源,也可以手动进行安装。
$sudo add-apt-repository ppa:nilarimogard/webupd8
$sudo apt-get update
$sudo apt-get install ap-hotspot
3.2 配置ap-hotspot
更新好软件源,然后安装完成ap-hotspot,进入配置界面,输入ssid和密码,即可:
$sudo ap-hotspot configure //配置界面,需要输入ssid和密码
Detecting configuration...
Detected eth0 as the network interface connected to the Internet. Press ENTER if this is correct or enter the desired interface below (e.g.- eth0, ppp0 etc.)://默认按Enter即可
Detected wlan0 as your WiFi interface. Press ENTER if this is correct or enter the desired interface (e.g.- wlan1)://默认按Enter即可
Enter the desired Access Point name or press ENTER to use the default one (myhotspot)://Wifi名字
Enter the desired WPA Passphrase below or press ENTER to use the default one (qwerty0987)://wifi 密码
3.3 启动wifi热点
执行完以上步骤之后,可以启动wifi
$sudo ap-hotspot start //启动wifi
Starting Wireless Hotspot...
Wireless Hotspot active
当出现以上内容即为启动成功,这个时候可以通过移动设备连接。
3.4 可能会碰到的问题3.4.1 一直处于Starting Wireless Hotspot…状态
ubuntu14.04上使用的版本为hostapd2.x版本,但hostapd2.x版本存在bug,这里的解决方案是需要将默认版本移除,使用hostapd1.0版本即可
$sudo apt-get remove hostapd
重新安装hostapd1.0版本,这里在网上提供的版本中,找不到对应的包,这里在父目录下找到了对应1.0的安装包,下载安装之:
$wget //如果是32位系统,此目录下可找到32位包
sudo dpkg -i hostapd*.deb //指定刚才下载的安装包
sudo apt-mark hold hostapd //禁止hostapd自动更新到新版本
安装完成之后,重启即可使用。
3.4.2 “Another process is already running”问题
这个问题是在已经有一个wifi热点在运行的时候,重新进入的时候尝试重新打开时,会报此错误,按照如下操作即可解决
sudo rm /tmp/hotspot.pid //删除已有的热点之后重新启动即可
4. ATC安装4.1 ATC简介
ATC是Facebook开源移动网络测试工具,可以用来模拟不同的网络环境,可控制的方面主要包括带宽、时延抖动、丢包率、错包率、包重排等衡量网络质量的重要指标。其主要的工作原理是利用了Linux流量控制系统,通过纯python的网络库pyroute2调用netlink的API控制的。刚才提到的几个重要的指标:
· bandwidth
· latency
· packet loss
· corrupted packets
· packet ordering
ATC网络结构构成图
4.2 ATC安装所需要的环境
如果直接使用提供的虚拟机镜像,则ATC已经安装好,不需要再安装,跳过安装步骤直接运行即可。如果自行搭建双系统或者全新虚拟机,则需先安装ATC。
以下步骤都在ubuntu14.04上完成:
ATC只能运行在Linux上,其安装环境使用的是虚拟机+ubuntu+无线网卡及python 2.7+和Django 1.7+。
这里使用pip这种最简单方式安装ATC
首先,必须安装Python2.7以上版本,然后安装pip:
sudo apt-get install python-pip python-dev build-essential)
sudo pip install --upgrade pip
然后,使用pip直接安装好ATC所有组件:
$pip install atc_thrift atcd django-atc-api django-atc-demo-ui
$pip install django-atc-profile-storage
所有都安装完成之后,需要先创建一个Django工程将ATC配置运行起来
$django-admin startproject atcui
$cd atcui
创建完成django工程后,需要进行一些配置才能够使应用完全运行起来,首先,编辑atcui/setting.py,添加ATC应用到INSTALLED_APPS
INSTALLED_APPS = (
...
# Django ATC API
'rest_framework',
'atc_api',
# Django ATC Demo UI
'bootstrap_themes',
'django_static_jquery',
'atc_demo_ui',
'atc_profile_storage',
)
接着,编辑atcui/urls.py,添加ATC应用的路由信息到urlpatterns,经过这步之后,在之后url方式访问才可以有正确的响应:
from django.views.generic.base import RedirectView
urlpatterns = patterns('',
...
# Django ATC API
url(r'^api/v1/', include('atc_api.urls')),
# Django ATC Demo UI
url(r'^atc_demo_ui/', include('atc_demo_ui.urls')),
# Django ATC profile storage
url(r'^api/v1/profiles/', include('atc_profile_storage.urls')),
url(r'^$', RedirectView.as_view(url='/atc_demo_ui/', permanent=False)),
)
最后,还需要生成Django工程的数据库文件:
$python manage.py migrate
4.3 运行ATC
首先要启动的是核心组件atcd,同时需要指定wan口和lan口,默认启动方式如下:
$sudo atcd
这里假定eth0是连接wan的接口,eth1是连接lan的接口,以上操作就可生效
4.4 设置ATC弱网络环境
当ATC成功运行,并且可以通过访问时,我们有两种方式可以进行网络的设置。
· 通过ATC UI进行设置
· 通过ATC提供的API进行网络类型设置
· 通过网络分析大师来自动设置(推荐方案) ——将在下一章节单独介绍,建议先看
4.4.1 通过ATC UI进行设置
首先,手机连接上热点wifi
其次,通过浏览器访问ATC WEB页面,你会看到下图的页面,滑动页面可以看到,其中包含了Notifications、Authentication、Profiles、Shaping Setting。前两项可不用,直接使用后两部分。
接着,Turn On之后,通过select已有的网络模型来设置手机的网络环境。当select之后就会出现Update Shaping,点击之后即生效)。
或者,通过创建新的网络模型来设置手机的网络环境。打开Sharping Settings,输入各项模拟值,下图为PC侧截图(手机侧同理)。输入完成之后,点击Profiles下面的Create按钮并填写相应的模型名称。同样,点击Update Shaping使设置生效。
最后,wanem以及ATC两个环境都存在,但不能在同一台服务器上使用,所以,大家弱网络测试时,移步到ATC测试。有什么使用问题,可以一起交流下。
4.4.2 通过ATC API设置网络模型
·通过GETing /api/v1/shape/获取当前设备的网络状态(模型)
·通过POSTing /api/v1/shape/对当前设备网络状态进行设置
·通过DELETE /api/v1/shape/ 对当前设备网络状态进行删除,恢复正常网络
Examples:
·检查当前设备的网络状态
当前设备未有任何网络状态设置↑
当前设备设置了对应的网络状态↑
·设置设备的网络状态
设置网络状态时,通常需要先配置好网络模型的各项参数,可以本地设置好参数,然后使用curl进行设置
·删除设备的网络状态
至此,通过ATC API即可完成对设备的查询、设置、删除。
5.网络分析大师
网络分析大师目前提供抓包、弱网络接入的功能。本文中只介绍弱网络接入步骤:
·启动ATC
·启动PC上启动网络分析大师,插上移动设备,点击“连接设备”
·移动设备连上ATC服务器的热点wifi
·通过下方的带宽限制、网络类型直接切换当前设备的弱网络环境
当然如果想快速模拟弱网络环境,腾讯有一款非常好用的产品,WeTest云真机--弱网络测试。云端有很多真机,在弱网络环境下,在网页上使用云端真机操作APP产品,进行测试。
这个平台上的机型很全。你可以测试各个机型在弱网络环境下的产品操作。感觉很方便
怎样判断websocket是否断开 有没有对应的api (我用的是Django 和Python语言)
# coding:utf-8
import os
import struct
import base64
import hashlib
import socket
import threading
import paramiko
def get_ssh(ip, user, pwd):
try:
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(ip, 22, user, pwd, timeout=15)
return ssh
except Exception, e:
print e
return "False"
def recv_data(conn): # 服务器解析浏览器发送的信息
try:
all_data = conn.recv(1024)
if not len(all_data):
return False
except:
pass
else:
code_len = ord(all_data[1]) 127
if code_len == 126:
masks = all_data[4:8]
data = all_data[8:]
elif code_len == 127:
masks = all_data[10:14]
data = all_data[14:]
else:
masks = all_data[2:6]
data = all_data[6:]
raw_str = ""
i = 0
for d in data:
raw_str += chr(ord(d) ^ ord(masks[i % 4]))
i += 1
return raw_str
def send_data(conn, data): # 服务器处理发送给浏览器的信息
if data:
data = str(data)
else:
return False
token = "\x81"
length = len(data)
if length 126:
token += struct.pack("B", length) # struct为Python中处理二进制数的模块,二进制流为C,或网络流的形式。
elif length = 0xFFFF:
token += struct.pack("!BH", 126, length)
else:
token += struct.pack("!BQ", 127, length)
data = '%s%s' % (token, data)
conn.send(data)
return True
def handshake(conn, address, thread_name):
headers = {}
shake = conn.recv(1024)
if not len(shake):
return False
print ('%s : Socket start handshaken with %s:%s' % (thread_name, address[0], address[1]))
header, data = shake.split('\r\n\r\n', 1)
for line in header.split('\r\n')[1:]:
key, value = line.split(': ', 1)
headers[key] = value
if 'Sec-WebSocket-Key' not in headers:
print ('%s : This socket is not websocket, client close.' % thread_name)
conn.close()
return False
MAGIC_STRING = '258EAFA5-E914-47DA-95CA-C5AB0DC85B11'
HANDSHAKE_STRING = "HTTP/1.1 101 Switching Protocols\r\n" \
"Upgrade:websocket\r\n" \
"Connection: Upgrade\r\n" \
"Sec-WebSocket-Accept: {1}\r\n" \
"WebSocket-Origin: {2}\r\n" \
"WebSocket-Location: ws://{3}/\r\n\r\n"
sec_key = headers['Sec-WebSocket-Key']
res_key = base64.b64encode(hashlib.sha1(sec_key + MAGIC_STRING).digest())
str_handshake = HANDSHAKE_STRING.replace('{1}', res_key).replace('{2}', headers['Origin']).replace('{3}', headers['Host'])
conn.send(str_handshake)
print ('%s : Socket handshaken with %s:%s success' % (thread_name, address[0], address[1]))
print 'Start transmitting data...'
print '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -'
return True
def dojob(conn, address, thread_name):
handshake(conn, address, thread_name) # 握手
conn.setblocking(0) # 设置socket为非阻塞
ssh = get_ssh('192.168.1.1', 'root', '123456') # 连接远程服务器
ssh_t = ssh.get_transport()
chan = ssh_t.open_session()
chan.setblocking(0) # 设置非阻塞
chan.exec_command('tail -f /var/log/messages')
while True:
clientdata = recv_data(conn)
if clientdata is not None and 'quit' in clientdata: # 但浏览器点击stop按钮或close按钮时,断开连接
print ('%s : Socket close with %s:%s' % (thread_name, address[0], address[1]))
send_data(conn, 'close connect')
conn.close()
break
while True:
while chan.recv_ready():
clientdata1 = recv_data(conn)
if clientdata1 is not None and 'quit' in clientdata1:
print ('%s : Socket close with %s:%s' % (thread_name, address[0], address[1]))
send_data(conn, 'close connect')
conn.close()
break
log_msg = chan.recv(10000).strip() # 接收日志信息
print log_msg
send_data(conn, log_msg)
if chan.exit_status_ready():
break
clientdata2 = recv_data(conn)
if clientdata2 is not None and 'quit' in clientdata2:
print ('%s : Socket close with %s:%s' % (thread_name, address[0], address[1]))
send_data(conn, 'close connect')
conn.close()
break
break
def ws_service():
index = 1
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(("127.0.0.1", 12345))
sock.listen(100)
print ('\r\n\r\nWebsocket server start, wait for connect!')
print '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -'
while True:
connection, address = sock.accept()
thread_name = 'thread_%s' % index
print ('%s : Connection from %s:%s' % (thread_name, address[0], address[1]))
t = threading.Thread(target=dojob, args=(connection, address, thread_name))
t.start()
index += 1
ws_service()
安装django成功了,但是在pycharm创建django一直提示“intall django failed”?
你要在pycharm里安装django,需要一个在pycharm里设置一个国内源,不然你用的是国外的源,速度非常慢,很容易超时,你第2张图中的红字错误提示,就是超时,所以你添加国内源就可以解决此问题
解决方法:
点击文件菜单中的设置,进入设置界面,然后点右边这个+号就可以安装Django或者别的包
点开这个加号后,点管理源
然后点右边的加号添加国内的镜像源,我添加了两个,一个是豆瓣,一个是阿里云的
还有一些常用的源,我贴在这里,仅供参考
# 清华大学
# 阿里云
# 豆瓣
# 中国科学技术大学
# 华中科技大学
Django新手教程6,新建一个项目
感觉再不按套路出牌就要被群众围殴了,那咱么就开始吧。
打开CMD黑窗口,我们输入
workon django_env
我们先看看怎么在黑窗口里面穿梭于各个URL之间,你先看你现在所处的位置,一般来说,新打开的CMD,都是处于
C:/User/your_name
这个位置,我们先到D盘,根目录从C到D,我们只需要输入
D:
就可以到达D盘了,如果你的django_env是激活的那么,他会自动跳转到
D:/py_env/django_env
这个目录下,我们当然可以把项目就建在这里,但也可以建在别的地方。所以请输入(注意cd和两点之间有一个空格)
cd ..
cd是前往的意思,两个小点指的是父亲,意思是前往当前目录的父目录,
于是,我们来到
D:/py_env
目录下,再次输入
cd ..
于是我们达到
D:/
这已经是D盘的根目录的再输入cd ..已经没有什么效果了。如果你之前按照我的教程一步一步来,那么,你已经在在这个根目录上建好了一个叫django_project的空文件夹,如果你没有建好 ,那么请输入
mkdir django_project
创建一个这个文件夹,当然,你也可以在图形界面,打开我的计算机,然后到达位置右键新建文件夹。这里为了逼格和更加熟悉cmd窗口起见,我建议你还是用命令行。
我们cmd的路径(准确的说是工作路径)现在在D盘的根目录,
因此,请输入
cd django_project
表示前往 django_project ,当然,这个时候你得确定django_project是D盘根目录下的一个子目录。
如果,我们还处于
D:py_env/django_env
那么输入
cd django_project是无效的,你得按照我们刚才一步一步抵达D盘,然后在进入到django_project。或者,你可以直接输入绝对路径
cd D:/django_project
使用上面的命令,只要你处于D盘,无论是在哪一级的目录,都可以一步到位。
抵达现场,我们马上就要新建我们的项目了。
激动人心的一刻到了,请在CMD中输入
django-admin startproject mysite
这时,我们创建了一个项目,这个项目的名字叫mysite,等等,说好的做云盘,为毛名字不是mycloud呢?这就要提到django的精妙之处了,新建了一个项目,就相当于,我们在计算机上圈了一块地(D:/django_project/mysite目录以后就是我们网络服务这一块的地盘了),还没开始建展馆,为什么先圈地而不是直接新建一个展馆呢,因为我们圈了地就可以在地上建很多展馆啊,在django看来,云盘啥的,够不上称为一个项目,只能称之为应用(一座展馆),只有将很多展馆放在一起,才能称之为项目,也就是说,一个项目可以包含很多的应用(APP),比如我们的网站可以提供云盘服务,我们也可以,提供个人博客服务,我们还可以开一个讨论某植物的论坛啥的,反正就是为了将来能够提供全家桶服务,所以,云盘只能算做是一个APP。当然,目前我们只这块地上建一座提供云服务的展馆。其他的展馆以后再说。
还是在cmd黑窗口,请输入
dir
用这条指令可以列出当前目录下的子目录和存放文件的情况,
我们可以看到,生成一个叫mysite的子目录,实际上,在mysite的上面还有两个目录,一个目录是一个点,表示自己,也就是django_project本身,另一个目录是两个点,表示父目录,也就是D盘根目录。所以我们看到的是django_project目录的一家三代。
这和图形界面基本是统一的,下图的左上角圈的地方表示的就是父目录,至于本身目录嘛,就没必要刻意用什么图形表示了。
你用鼠标点击某个文件夹,实际上系统内部就是帮你运行了一下
cd 你点击的文件夹
你点击后退,则帮你运行
cd ..
回到正题,我们看到了一个mysite子目录,所以进去看看,请输入
cd mysite
然后输入
dir
查看情况
发现又有一个mysite目录,坑爹啊,俄罗斯套娃呢这是!
这一看就知道django是外国人搞得工具,子目录跟父目录叫同一个名字(好歹给子一级的目录起个名字叫mysite二世啥的行不。没办法,django设计者这么叫了,我们也不能随便乱改,以后我们把里面的那个mysite叫做子mysite,外面的那个叫父mysite以区分),仔细一看,旁边还有一个manage.py,先不不管这个,再进去子mysite看一下,还好,再没有mysite目录了,里面是
里面有4个py文件,看到没有,其中有一个是urls.py,URL之重要,需要专门一个文件来管理,如果你之前有认真看文章的话应该就能差不多猜到它是起什么作用的文件了。除了urls.py,settings.py也是非常重要的,都是用来管理mysite这个项目的,所以,我觉得最后这个mysite文件夹应该叫做mysite_manage因为它里面的东西,和它旁边的manage.py一样都是用来管理项目的。
为了让大家对项目结构有更清楚认识,我找了django官网上的图片
结语:以上就是首席CTO笔记为大家介绍的关于Django如何判断网络断开的全部内容了,希望对大家有所帮助,如果你还想了解更多这方面的信息,记得收藏关注本站。