วันเสาร์ที่ 24 มกราคม พ.ศ. 2558

Test 02 - directory list in cgi


test 02 directory list by cgi

จากคราวที่แล้วที่ได้ทดสอบ ให้ python เขียน html ดู คราวนี้จึงได้ทดสอบการใช้
cgi ในการเขียนหน้าเว็บ โดย python
ขั้นแรก จัดเตรียม เซิฟเวอร์ให้พร้อมที่จะรัน cgi

ทดสอบรันโค้ดที่ได้เขียนมา
 โดยเข้าไปที่ 0.0.0.0:8000/#dir/#file โดย #dir คือ directory ที่อยู่ภายใน server และ #file คือชื่อของ file






--code--

#!/usr/bin/python
print "Content-type: text/html\n\n"
import cgi, cgitb, os

datain = cgi.FieldStorage()
directory, srcq = "", ""

def spl(text):
    text = text.replace("/", "");
    text = text.replace(".", "");
    text = text.replace("~", "__sp__");
    return text

def chknxtnode(text1, text2):
    root = ""
    leaf = ""
    if len(text1) > len(text2):
        root = text2
        leaf = text1
    else:   
        root = text1
        leaf = text2
    i, result = 0, 1
    while i < len(root):
        if root[i] != leaf[i]:
            result = 0
        i += 1
    return result

def space(num):
    for i in range(num):
        print "&nbsp;"

def namefol(part):
    part = part.split("/")
    return part[len(part)-1]
   

def nbfol(part):
    print " <input type=\"button\" value=\"show\" name=\""+spl(part)+"\" id=\""+spl(part)+"=show\" onclick=\"javascript:showtools(name)\"> <"+spl(part)+" style=\"display:none\"><input type=\"button\" name=\""+part+"\" value=\"rename\" onclick=\"javascript:dirrename(name)\"><input type=\"button\" name=\""+part+"\" value=\"new file\" onclick=\"javascript:dirnewfile(name)\"></"+spl(part)+">"

def nbfile(part):
    print " <input type=\"button\" value=\"show\" name=\""+spl(part)+"\" id=\""+spl(part)+"=show\" onclick=\"javascript:showtools(name)\"> <"+spl(part)+" style=\"display:none\"><input type=\"button\" name=\""+part+"\" value=\"delete\" onclick=\"javascript:filedelete(name)\"><input type=\"button\" name=\""+part+"\" value=\"rename\" onclick=\"javascript:filerename(name)\"></"+spl(part)+">"

for i in datain.keys():
    exec(i + " = " + datain[i].value)

print """
<script src="http://code.jquery.com/jquery-1.11.2.min.js"></script>
<script>
function jumpto(){
    var query = document.getElementById("txtb1").value;
    var srcq = document.getElementById("txtb2").value;
    var old = \"""" + directory + """\"
    if(query == "-"){
        window.location.href = "dirls.py?directory=\\\""+old+"\\\"&srcq=\\\""+srcq+"\\\"";
    }else{
        window.location.href = "dirls.py?directory=\\\""+query+"\\\"&srcq=\\\""+srcq+"\\\"";
    }
}

function showtools(part){
    var enp = $(part);
    var data = document.getElementById(part+"=show");
    if(data.value == "show"){
        data.value = "hide";
        enp.show();
    }else{
        data.value = "show";
        enp.hide();
    }
}

function check(part){
    $(part).toggle();
}

function dirrename(part){
    while(true){
        datas = part.split("/")
        var folname = datas[datas.length - 1];
        var dirname = "";
        for(var i = 0; i < datas.length - 1; i++){
            dirname += datas[i];
        }
        var newname = prompt("Rename this folder to", folname);
        if(newname == null){
            break;
        }
        if($(dirname+newname).length == 0){
            xmlhttp = new XMLHttpRequest();
            xmlhttp.open("GET", "command.py?type=\\\"rename\\\"&dir=\\\""+part[0]+"\\\"&newname=\\\""+newname+"\\\"");
            xmlhttp.send();
            break;
        }else{
            alert("sorry guys but this name is exists in directory");
        }
    }
}

function dirnewfile(part){

}

function filedelete(part){

}

function filerename(part){

}
</script>
"""

print "<html><head></head><body><b>Directory : <input type=\"textbox\" name=\"txtbdir\" id=\"txtb1\"> \"-\" for still use old directory<br>Search for : </b><input type=\"textbox\" name=\"txtsrc\" id=\"txtb2\"> <input type=\"button\" value=\"accept\" name=\"butselect\" onclick=\"javascript:jumpto()\"><br><br>"

try:   
    if (directory != "") and (srcq == ""):
        print "<h1>Search in " + directory + "</h1>"
        try:
            data = os.walk(directory);
            updir = {}
            updir[0] = str(directory)
            for part in data:
                while 1:
                    if chknxtnode(updir[len(updir) - 1], part[0]):
                        updir[len(updir)] = part[0]
                        break
                    else:
                        dummy = {}
                        for i in range(len(updir) - 1):
                            dummy[i] = updir[i]
                        updir = dummy
                space(3*(len(updir)-2))
                print "<b><a href=\""+part[0]+"\">"+part[0]+"</a></b> "
                nbfol(part[0])
                print "<br>"
                for file in part[2]:
                    space(3*(len(updir)-1))
                    print "<a href=\""+part[0]+file+"\">"+file+"</a> size : "+ str(os.stat(str(part[0])+"/"+str(file)).st_size) + " b "
                    nbfile(str(part[0])+str(file))
                    print "<br>"
        except:    print "directory not exists !!";
    elif directory != "":
        print "<h1>Search for " + srcq + " in " + directory + "</h1>"
        try:
            data = os.walk(directory);
            for part in data:
                if srcq in namefol(part[0]):
                    print part[0]
                    nbfol(part[0])
                    print "<br>"
                for file in part[2]:
                    if srcq in file:
                        space(5);
                        print part[0] + " --> <a href=\""+str(part[0])+"/"+str(file)+"\">"+file+"</a>"
                        nbfile(str(part[0])+"/"+str(file))
                        print "<br>"
        except:    print "directory not exists !!";
    else: gotoexcept
except:    print "<h2>Please enter some directory and push select...</h2>"

ผลการทดสอบของ code

ใส่ directory ที่ต้องการค้นหาลงไป
หลังจากกด accept แล้วจะแสดงผลการค้นหาขึ้นมาทดสอบค้นหาคำ โดยการพิมพ์ key word ที่ต้องการค้นหาลงไปในช่อง search for หลังจากนั้นกด accept จะปรากฎ file ที่มีชื่อตรงกับคำที่ใส่ลงไป

ไม่มีความคิดเห็น:

แสดงความคิดเห็น