您的位置:1010cc时时彩经典版 > 1010cc时时彩经典版 > 1010cc时时彩经典版贵在坚持

1010cc时时彩经典版贵在坚持

发布时间:2019-09-23 20:17编辑:1010cc时时彩经典版浏览(114)

    请求 再次回到静态页面 (注意静态能源寄存地方)

    参照他事他说加以考察资料

      官网: 

      官方文书档案: 

      Mockito at github:

      能够在这里看版本号: 

     

    $ node my_web_server.js  
    

    Node内建有三个模块,利用它能够很轻易成立基本的HTTP服务器。请看上面案例。

    常备不懈和工具

    1010cc时时彩经典版贵在坚持。第一,确认一下大家科学配置了开垦条件。本学科中,笔者假如你的操作系统是Debian类Linux发行版,如Mint(http://www.linuxmin.com),或者 Ubuntu(http://ubuntu.com)。当中全体的一声令下操作都将基于那些连串。

    接下去,大家先经过apt-get命令安装必须的Debian包:

     sudo apt-get install python-dev python-pip
    

    那将设置python开拓工具和编写翻译所要求的python库,以及pip:一个心灵手巧耗用的工具,你能够用它通过命令行来安装自个儿须要的python包。用起来吧!首先大家设置多少个情形管理工科具:

    sudo pip install virtualenvwrapper
    echo "source /usr/local/bin/birtualenvwrapper.sh" >> ~/.bashrc
    

    解释一下上面包车型客车操作:sudo 告诉系统咱们须要管理员权限来运作前面包车型大巴通令,pip是暗许的python包管理工科具,能够帮大家设置virtualenvwrapper包。第2个指令把命令加多到virtualenvwrapper.sh并加载到当下调控台,以便于在如今shell中运维。

    分享一个flask搭建的小web

    Hello World程序

      想着写多个Hello World说Bellamy(Bellamy)下Mockito怎么用,结果写着写着就写复杂了.

      先看代码:

    package com.mengdd.examples.mockito;
    
    public class HelloWorld {
        private MyRobot mRobot;
    
        public MyRobot getRobot() {
            return mRobot;
        }
    
        public void setRobot(MyRobot robot) {
            this.mRobot = robot;
        }
    
        /**
         * This is the method we want to test.
         * When there is an robot, this method return the robot's information
         * otherwise, return some sorry text
         */
        public String sayHello() {
            MyRobot robot = getRobot();
            if (null != robot) {
                return robot.getSomeInfo();
            }
    
            return "No robot here, sorry!";
        }
    
        /**
         * MyRobot class
         */
        public static class MyRobot {
    
            /**
             * Get some information from somewhere, the implementation may varies
             */
            public String getSomeInfo() {
                return "Hello World -- From robot";
            }
        }
    }
    

      这段代码里面包含了四个HelloWorld类和二个里边静态类My罗布ot(小编的机器人).

      HelloWorld中有多个格局叫sayHello(),是我们要测的方法.

      它会推断成员变量是或不是为空,不为空则调用其情势得到一些新闻,不然重返一条提示新闻.

     

     

      -------------------

      这里插播一下,关于内部类的介绍能够崇敬从前的一篇笔记:

      内部静态类和中间非静态类能够类比:静态成员变量和非静态成员变量.

      -------------------

     

     

      测验类代码如下:

    package com.mengdd.examples.mockito;
    
    import org.junit.Test;
    
    import static org.hamcrest.CoreMatchers.is;
    import static org.junit.Assert.assertThat;
    import static org.mockito.Mockito.mock;
    import static org.mockito.Mockito.when;
    
    
    public class HelloWorldTest {
        @Test
        public void testSayHelloWhenThereIsRobot() throws Exception {
            // We want to test the sayHello() method in the class HelloWorld.
            // But we don't care about how MyRobot get its information.(We can treat it as external interface).
    
            // Maybe the robot rely on many complicated things.(Although it's simple in this case.)
            // And when the robot's actions change in the future, we don't need to change this test case.
    
            // We can mock the MyRobot's action to make it simple and just test whether sayHello() can do its own work.
    
    
            // Mock steps
            HelloWorld.MyRobot robot = mock(HelloWorld.MyRobot.class); // Mock MyRobot class
            String mockInfo = "some mock info";
            when(robot.getSomeInfo()).thenReturn(mockInfo); // Set behavior for mock object
    
            // real object
            HelloWorld helloWorld = new HelloWorld();//This is the real objec we want to test
            helloWorld.setRobot(robot);//set the mock robot to real object
    
            // execute the target method we want to test
            String result = helloWorld.sayHello();
    
            // assert the result is what we want to have
            assertThat(result, is(mockInfo));
        }
    }
    

      因为我们要测量试验的是HelloWorld的sayHello()方法是还是不是能符合规律专门的学业.

      大家需求假定其中robot的行为是平常的(大家并不关怀robot实际上做的做事,以及它如何做),所以这里运用了mock.

      比方假设机器人的贯彻中要发送一个呼吁,大家那边正是一贯mock它赢得的结果,并非真的去发这么些诉求.

     

      就周围希图好了所必要的具有外部条件,看sayHello()方法的表现是或不是能适合大家的预期.

     

     

      为了完美起见,测量检验了sayHello()的另一种case,这里未有利用mockito.

    @Test
    public void testSayHelloWhenThereIsNoRobot() throws Exception {
        HelloWorld helloWorld = new HelloWorld();
        helloWorld.setRobot(null);
    
        String result = helloWorld.sayHello();
    
        assertThat(result, is("No robot here, sorry!"));
    }
    

     

     

    1 var http = require('http');
    2 http.createServer(function (req, res) {
    3   res.writeHead(200, {'Content-Type': 'text/plain'});
    4   res.end('Hello Worldn');
    5 }).listen(8080);
    6 
    7 console.log('Server running on port 8080.');
    

    path.js :

    1010cc时时彩经典版 11010cc时时彩经典版 2

      1  var http = require('http');  2  var fs = require('fs');  3  var assert = require('assert');  4  var path = require('path');  5  var url = require('url');  6     7  var config = {  8     port:81  9  } 10  var sum = 0; 11  var response = { 12     "content":[ 13         { 14             "type":"11111", 15             "name":"hello world" 16         }, 17         { 18             "type":"22222", 19             "name":"world Map" 20         } 21           22     ] 23 } 24    25  http.createServer(function{ 26     sum   ; 27     var pathName = url.parse.pathname; 28     var localPath = ""; 29     var ext = path.extname; 30     var Type = req.method; 31     if(Type =='POST'){ 32         var resData = {}; 33         var body = ''; 34         req.on('data',function{ 35             body  = data; 36             console.log('data'   data); 37         }); 38         req.on('end',function{ 39             var len = body.split('&').length; 40             if(len > 0){ 41                 for(var i=0;i<len;i  ){ 42                     var key = body.split('&')[i]; 43                     resData[key.split[0]] = key.split[1];                          44                 } 45             } 46             res.writeHead(200,{'Content-Type':'application/x-json'}); 47             res.end(JSON.stringify,'binary');   48         }); 49               50     } 51     else if(Type =='GET'){ 52         if(pathName =='/'){ 53             pathName = '/html/index.html'; 54         } 55         if(ext.length > 0){ 56             localPath = '.'   pathName; 57         } 58         else{ 59             localPath ='./src'   pathName; 60         } 61         console.log('localPath:'   localPath); 62         fs.exists(localPath,function{ 63             if{ 64                 console.log(localPath   ' is exists'); 65                 fs.readFile(localPath,'binary',function{ 66                     if{ 67                         res.writeHead(500,{'Content-Type':'text/plain'}); 68                         res.end('server Error:'   err); 69                     } 70                     else{ 71                         res.writeHead(200,{'Content-Type':getContentTypeByExt; 72                         if(ext === '.json'){ 73                             res.end(JSON.stringify,'binary'); 74                         } 75                         else{ 76                             res.end(file,'binary'); 77                         } 78                       79                     } 80                 }) 81             } 82             else{ 83                 res.writeHead(400,{'Content-Type':'text/plain'}); 84                 res.end('404:File Not found'); 85             } 86           87           88     }) 89     } 90       91       92  }).listen(config.port); 93    94 function getContentTypeByExt { 95     ext = ext.toLowerCase(); 96     if (ext === '.htm' || ext === '.html') 97         return 'text/html'; 98     else if (ext === '.js') 99         return 'application/x-javascript';100     else if (ext === '.css')101         return 'text/css';102     else if (ext === '.jpe' || ext === '.jpeg' || ext === '.jpg')103         return 'image/jpeg';104     else if (ext === '.png')105         return 'image/png';106     else if (ext === '.ico')107         return 'image/x-icon';108     else if (ext === '.zip')109         return 'application/zip';110     else if (ext === '.doc')111         return 'application/msword';112     else if (ext === '.json')113         return 'application/x-json';114     else115         return 'text/plain';116 }117   118  console.log('new server is running: http://127.0.0.1:81')
    

    View Code

    安装虚构景况

    所谓设想蒙受正是python用来隔开分化条件中的开荒包的一种艺术:它代表你能够轻巧的军管各式包注重。想象一下,你要定义四个比一点都不大的只含有供给的开垦包的等级次序,设想情形就足以圆处处使你举行测量检验和输出必须的包。大家就要前面再商量它。今后,按下键盘上的Ctrl Shift T开垦二个新的终极,成立我们的helloworld遭遇,如下:

    mkvirtualenv hello
    pip install flask
    

    先是行,创设了名称为'hello'的虚构蒙受,且自动加载碰到变量到日前终端。你能够输入deactivate一声令下关闭它,也足以经过以下命令来加载激活这一条件:

     workon hello #需要的话,用其它的环境名来替换hello
    

    第二行告诉pip去安装Flask包到日前设想情形里,在本例中是把flask包安装到hello设想景况里。

    欣赏《千与千寻》中的一句话,不管前方的路有多苦,只要走的主旋律精确,不管多么崎岖不平,都比站在原地更近乎幸福。

    Mockito Hello World

    近年来您也许曾经注意到有的不平等的事物。你的Node.js应用并未退出。那是因为您创设了叁个服务器,你的Node.js应用将继续运转,并响应央求,直到你关闭它。

    index.css

    1010cc时时彩经典版 31010cc时时彩经典版 4

     1 @charset "utf-8"; 2 html{ height: 100%} 3 body{ 4     font-family:"Microsoft YaHei",Arial,Helvetica,sans-serif,"宋体"; 5     font-size:3.5rem; 6 } 7 li{ 8     list-style-type:none; 9 }10 .music_class{11     width:100%;12     margin:10px;13 }14 .music_class img{15     width:95%;16 }17 .music_category_list{18     margin:10px;19 }20 .music_category_list li{21     width:95%;22     margin:5px;23     padding:5px;24     border:2px solid #ccc;25 }26 .postData{27     width:100%;28     color:blue;29     fonst-size:20px;30     text-align:center;31 }32 button{33     font-size:30px;34     width:300px;35     height:100px;36 }
    

    View Code

    提议服务器的连锁代码下载地址:

    下载下来运转:node path 然后拜候

    总计

    设置开拓服务器是八个特别重大的职务,我们完结了。创制“Hello World”程序是介绍一项新才干最佳的法子,大家也完了了。最后我们学到了如何生成HTML页面并应用静态文件,基本上正是大非常多web程序做的。在本章你学到了颇具本领,笔者愿意以此历程很轻便何况令你知足。
    在下章中,我们增多一点挑衅性的调味汁,设置更加高等的沙盘。大家将学习怎么样利用Jinja2包来创制更棒的模版,并同意大家用最少的输入做的更加多。
    再会吧!

     1 # -*- coding: utf-8 -*- 2 from flask import Flask 3 from flask import request 4 import os,re,io 5 from flask_restful import Api 6 from flask_restful import Resource,reqparse 7  8  9 app = Flask(__name__)10 api = Api11 12 class BaseResource:13      def __init__:14           Resource.__init__15           self.parser = reqparse.RequestParser()16           self.add_args()17           self.create_args()18      def add_args:19           pass20      def add_argument(self,*args,**kwargs):21           self.parser.add_argument(*args,**kwargs)22           def create_args:23           self.args = self.parser.parse_args()24      def get_arg:25           return self.args[key]26 27 class HelloWorld(BaseResource):28      def add_args:29            self.add_argument('param',type=str,help='Param')30      def say:31            param=self.get_arg("param")32            return re_result(msg="Hello World", code=0,data=param)33      def post:34            return self.say()35      def get:36            return self.say()37 38      def re_result(msg="", data=None, code=-1):39           return {"msg": msg, "data": data, "code": code}40 41  42 43 @app.route('/')44 def hello_world():45       return 'Hello World!'46 47  48 49 @app.route("/index")50 def hello_index():51       title='后台返回前端页面参数'52       
             return render_template('index.html',title=title)53 54 55 api.add_resource(HelloWorld,'/helloworld')56 57 if __name__ == '__main__':58        app.run(debug=True,port=8888)
    

    连串布局

      IDE是英特尔lij IDEA,用gradle配置项目.

      新建一个Java项目,gradle中须求有其一:

     

    repositories { jcenter() }
    dependencies { testCompile "org.mockito:mockito-core:1. " }
    

     

    单元测量检验用JUnit 4,所以gradle文件如下:

    apply plugin: 'java'
    apply plugin: 'idea'
    
    sourceCompatibility = 1.5
    version = '1.0'
    
    repositories {
        mavenCentral()
        jcenter()
    }
    
    dependencies {
        testCompile group: 'junit', name: 'junit', version: '4.11'
        testCompile "org.mockito:mockito-core:1.8.5"
    }
    

      写好现在在命令行试行:gradle idea

      相关的包就能下载好,并冒出在此处:

    1010cc时时彩经典版 5

     

     

     index.js 

    1010cc时时彩经典版 61010cc时时彩经典版 7

     1 $(document).ready(function(){
     2     function createEle(){
     3         var img = new Image();
     4         img.src = "../img/music_hot.png";
     5         img.onload = function(){
     6             var imgDom = '<img src="../img/music_hot.png"/>';
     7             $('.music_class').append(imgDom);
     8         }   
     9     }
    10     createEle();
    11     (function getDate(){
    12         var XHR = $.ajax({
    13                 timeout : 20000,
    14                 dataType : 'json',
    15                 type : 'GET',
    16                 url : '../package.json',
    17                 data : '',
    18                 beforeSend : function (request) {
    19                     request.setRequestHeader('Content-Type', 'application/json; charset=UTF-8')
    20                 },
    21                 complete : function(XMLHttpRequest, status) {
    22                     if (status == 'timeout') {
    23                         //theUIApp.tip($("body"), "网络异常,请检查网络");
    24                         util.toast("网络异常,请检查网络");
    25                     }
    26                 },
    27                 success : function (result) {
    28                     var LiLength = result.content.length;
    29                     if(LiLength > 0){
    30                         for(var i=0;i<LiLength;i  ){
    31                             var inp = '<li>'   result.content[i].name   '</li>';
    32                             $('.music_category_list').append(inp);
    33                         }
    34                     }                   
    35                 },
    36                 error : function (result) {
    37                     console.log(result)
    38                 }               
    39             });
    40     })();
    41      
    42     $('.postClick').click(function(){
    43         Post();
    44     })
    45      
    46     function Post(){
    47         var option = {
    48             name:'zhangsan',
    49             age:'15'
    50         }
    51         var XHR = $.ajax({
    52             timeout : 20000,
    53             dataType : 'json',
    54             type : 'POST',
    55             url : '../package.json',
    56             data : option,
    57             beforeSend : function (request) {
    58                 request.setRequestHeader('Content-Type', 'application/json; charset=UTF-8')
    59             },
    60             complete : function(XMLHttpRequest, status) {
    61                 if (status == 'timeout') {
    62                     //theUIApp.tip($("body"), "网络异常,请检查网络");
    63                     util.toast("网络异常,请检查网络");
    64                 }
    65             },
    66             success : function (result) {
    67                 if(result){
    68                     $('.postData').text(result.name);
    69                 }                   
    70             },
    71             error : function (result) {
    72                 console.log(result)
    73             }               
    74         });
    75     }
    76 })
    

    View Code

    假设你期望它形成一个兼职能的Web服务器,你必得检查所接受的伸手,读取合适的公文,并赶回所央浼的剧情。

    理解“Hello World”程序

    设定完设想情状,那大家用什么来编写出美貌的代码呢?一个编辑器或许是多个IDE(集成开采条件)?假设你的预算低,那么能够尝试一下LightTable editor编辑器(http://lighttable.com)。无需付费、快速况兼易于使用(Ctrl 空格能够看来全部可用选项),何况它还协助工作空间。这几个价位并未有越来越好的了。如若你很幸运有200美刀的预算(也许您有所自由许可,那就无需犹豫,直接出手PyCharm IDE吧(https://www.jetbrains.com/pycharm/buy/),它大约是最棒的Python Web开拓的IDE了。未来,大家后续。

    创制三个文书夹来贮存你的项目文件(不是必需的,但万一你那样做了,我们会更爱好您的),如下:
    mkdir hello_world
    走入新文件夹后创建文件 main.py:

    cd hello_world
    touch main.py
    

    main.py文件将包蕴全部“Hello World”程序代码。其剧情应当如下所示:

    #coding:utf-8
    from flask import Flask
    app = Flask(__name__)
    
    @app.route("/")
    def hello():
        return "Hello World!"
    
    if __name__=="__main__":
        app.run()
    

    哇塞!就是敲了多少个字,对啊?不?哈哈可以吗,笔者晓得的。那么,大家刚刚都做了什么?
    率先行标明我们的main.py文件使用utf-8编码。酷伙计们都那样做,所以别对您的丹麦语非母语的对象太苛刻。在你的有所python文件中运用它(那样能够在大型项目中帮您防止令人讨厌的低等错误)。
    第二行和第三行中,大家导入了Flask类并将其实例化。大家前后相继的名字是“app”。大约具有的都跟它(app)相关联:视图(view)、蓝图(blueprint) ,配置(config)等等。“__name__”参数是必得的,用来报告程序从哪儿查找能源,诸如静态内容或模板等。

    为了创造“Hello World”,在客商访谈web程序(使用浏览器或其余什么咚咚)的时候,大家要求告诉Flask实例如何回应。因而,Flask具备叫做路由(route)的东西。

    路由,正是是Flask读取诉求尾部并决定特别视图(view,译:Flask的视图并不是MVC意义上的视图view,而是类似MVC的控制器Controler)来应答此供给的法子。它首先深入分析被呼吁的UCRUISERL的不二秘诀部分,然后找出是哪个路由被登记到那一个路子上。

    在HelloWorld例子中,第五行,大家使用路由装饰符来把hello函数注册到根路线("/")。每一趟当程序接收到路线是“/”的恳求时,hello函数就能够被调用来应对这一个诉求。下边包车型客车片断体现了哪些检查UCRUISERL中的路线:

    from urlparse import urlparse
    parsed = urlparse("http://www.google.com/")
    assert parsed.path=="/"
    

    您也得以将多少个路由映射到同三个函数上,如下:

    @app.route('/') 
    @app.route('/index')
    def hello():
        return "Hello World"
    

    本例中,“/”和“/index”七个路子都被映射到hello视图函数上。

    第六行和第七行,大家成功了回应央浼的函数。注意: 它并未有参数而且复苏友好字符串。它因而不要求参数是因为需要数据(如被交付的表单form)可以由此线程安全的变量“request”来探访,那一点大家将要上传章节中开展详尽座谈。

    有关应答(response),Flask能够多种格式应答伏乞。在我们的事例中,大家以纯文本应对,但我们还足以JSON或HTML格式应答。

    第九行和第十行相比较轻便,它们检查main.py是以单独脚本依旧以模块的款型被调用。借使是本子,它就能运作内建的支出服务器。让大家试一下:
    python main.py

    您的巅峰将会有像样于上面包车型客车出口:
    Running on http://127.0.0.1:5000/ (Press CTRL C to quit)

    在您的浏览器中张开那些地点(1010cc时时彩经典版, )就能够看到,我们的主次已经屡见不鲜职业了。

    以脚本的款型调用main.py特别轻巧、便于设置。平常,你只需求安装Flask-Script扩充就能够调用开荒服务器。

    如若您把main.py作为模块调用,只须要把它用如下代码导入就能够:
    from main import what_I_want

    在测验代码的时候,你大概要求平常那样导入二个app的厂子函数。
    那大约正是大家“Hello World”程序全体供给解释和精通的事物了。近来前后相继的可惜正是从未风趣的元素,所以让大家增添上点东西,让程序越来越有趣些。加多上HTML,CSS,和JavaScript能够更美丽些,让我们索求吧。

    本文由1010cc时时彩经典版发布于1010cc时时彩经典版,转载请注明出处:1010cc时时彩经典版贵在坚持

    关键词: