前台
- <!DOCTYPE html>
- <html lang="en">
- <head>
- {%include "public_header.html"%}
- <link href="/static/bootstrap/bootstrap.min.css" rel="stylesheet" />
- <script src="/static/bootstrap/jquery.min.js" type="text/javascript"></script>
- <script src="/static/bootstrap/bootstrap.min.js" type="text/javascript"></script>
-
- <meta charset="UTF-8">
- <meta name="viewport"
- content="width=device-width,height=device-height,initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
- <meta name="apple-mobile-web-app-capable" content="yes"/>
- <title>运维自动化导航页</title>
- <style>
- body {
- background: #f7f7f7;
- margin: 10px;
- background-image:url('/static/images/bg.png');
- background-repeat:no-repeat;
- background-size:100% 100%;
- -moz-background-size:100% 100%;
- }
-
- </style>
- </head>
- <script>
- $(document).ready(function(){
- $("li").mouseover(function(){
- $(this).css("background-color","#FCF590");
- //$(this).animate({top:"-=10px"},"fast");
- });
- $("li").mouseout(function(){
- $(this).css("background-color","#DBEDFC");
- //$(this).animate({top:"+=10px"},"fast");
- });
- });
- add_link=function(){
- $('#dlg_title').text('添加链接');
- $('#dialog').modal('show');
- };
- do_add_link=function(){
- $.post('/url?action=add',{"class":$("#class").val(),"title":$("#title").val(),"url":$("#url").val()},function(d,s){
- if(s=="success"){
- $('#dialog').modal('hide');
- location.reload();
- }
- });
- };
- link_del=function(cls,title){
- $.post('/url?action=del',{"class":cls,"title":title},function(d,s){
- if(s=="success"){
- $('#dialog').modal('hide');
- location.reload();
- }
- });
- };
- </script>
- <body>
- <div class="modal fade" id="dialog" tabindex="-1" role="dialog" aria-hidden="true">
- <div class="modal-dialog" style="width:calc(50vw);">
- <div class="modal-content" >
- <div class="modal-header">
- <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
- <h4 class="modal-title"><span id="dlg_title"></span></h4>
- </div>
- <div class="modal-body">
- <input type="text" id="class" class="form-control" placeholder="分类名称">
- <input type="text" id="title" class="form-control" placeholder="标题">
- <input type="text" id="url" class="form-control" placeholder="链接URL">
- <button onclick="do_add_link()" class="btn btn-primary">添加</button>
- </div>
- </div>
- </div>
- </div>
- <h1 class="text-center" style="font-weight:bolder">运维导航页</h1>
- <div style="width:1200px;position:relative;left:calc(100vw/2);transform:translateX(-50%);">
- <div class="row">
- {% for class in nav %}
- <div style="background-color:rgba(199,212,247,0.2);padding:8px;margin:10px;box-shadow: 1px 1px 10px #888888;">
- <h4 style="margin:2px;font-weight:bolder;" ><span style="color:blue" class="glyphicon glyphicon-link"></span>{{class.class}}</h4>
- <ul style="margin:1px;padding:1px;display:flex;flex-wrap:wrap">
- {% for item in class.items %}
- <li style="border-radius:6px;position:relative;margin:4px;padding:4px;border:1px solid #E5E5E5;list-style:none;background-color:#DBEDFC;display:inline-block;">
- <h4 style="margin:0px;padding:2px;">{{item.title}}</h4>
- <h4 style="margin:0px;padding:2px;"><a href="{{item.url}}" target="_blank" class="btn btn-default">{{item.url}}</a></h4>
- </li>
- {% endfor %}
- </ul>
- </div>
- {% endfor %}
- {% for class in nav2 %}
- <div style="background-color:rgba(199,212,247,0.2);padding:8px;margin:10px;box-shadow: 1px 1px 10px #888888;">
- <h4 style="margin:2px;font-weight:bolder;" ><span style="color:blue" class="glyphicon glyphicon-link"></span>{{class.class}}</h4>
- <ul style="margin:1px;padding:1px;display:flex;flex-wrap:wrap">
- {% for item in class.items %}
- <li style="border-radius:6px;position:relative;margin:4px;padding:4px;border:1px solid #E5E5E5;list-style:none;background-color:#DBEDFC;display:inline-block;">
- <button type="button" class="close" data-dismiss="li" aria-hidden="true" onclick="link_del('{{class.class}}','{{item.title}}')">×</button>
- <h4 style="margin:0px;padding:2px;">{{item.title}}</h4>
- <h4 style="margin:0px;padding:2px;"><a href="{{item.url}}" target="_blank" class="btn btn-default">{{item.url}}</a></h4>
- </li>
- {% endfor %}
- </ul>
- </div>
- {% endfor %}
- <div style="background-color:rgba(199,212,247,0.2);padding:8px;margin:10px;box-shadow: 1px 1px 10px #888888;">
- <input type="button" class="btn btn-md btn-info" value="添加链接" onclick="add_link()">
- </div>
-
- </div>
- </div>
- </body>
- </html>
python-路由器urls.py
- #url
- from django.contrib import admin
- from django.urls import path, re_path
- from . import views
- from django.contrib.staticfiles.views import serve
-
- urlpatterns = [
- path('admin', admin.site.urls),
- path("",views.index),
- path('index',views.index),
- path('url',views.url),
- path('favicon.ico', serve, {'path': 'images/favicon.ico'}),
- ]
python-控制器views.py
- #views
- import datetime
-
- from django.contrib import auth
- from django.contrib.auth.decorators import login_required
- from django.shortcuts import render,HttpResponse,HttpResponseRedirect,redirect,reverse
- from django.http import HttpRequest,JsonResponse,HttpResponseForbidden
- from django.views.decorators.csrf import csrf_exempt
- import log.log as log
- import json
- import re
- import base.lib as lib
-
- def index(request:HttpRequest):
- context = {"nav":[
- {"class":"测试1","items":[
- {"title":"测试1","url":"http://192.168.1.1/"},
- {"title": "测试1", "url": "http://192.168.1.1/"},
- {"title": "测试1", "url": "http://192.168.1.1/"}]},
- {"class":"测试1","items":[
- {"title":"测试1","url":"http://192.168.1.1/"},
- {"title": "测试1", "url": "http://192.168.1.1/"},
- {"title": "测试1", "url": "http://192.168.1.1/"}]},
- {"class":"测试1","items":[
- {"title":"测试1","url":"http://192.168.1.1/"},
- {"title": "测试1", "url": "http://192.168.1.1/"},
- {"title": "测试1", "url": "http://192.168.1.1/"}]},
- {"class":"测试1","items":[
- {"title":"测试1","url":"http://192.168.1.1/"},
- {"title": "测试1", "url": "http://192.168.1.1/"},
- {"title": "测试1", "url": "http://192.168.1.1/"}]},
- ]}
- js=lib.read()
- if js:
- context["nav2"]=js
- response = render(request, "index.html", context)
- return response
- def url(request:HttpRequest):
- if "action" in request.GET.keys() and request.GET["action"]=="add":
- cls,title,url=request.POST["class"],request.POST["title"],request.POST["url"]
- js=lib.read()
- if js and "class" in js[0].keys():
- clss=[item["class"] for item in js]
- i=clss.index(cls)
- if i>=0:
- js[i]["items"].append({"title":title,"url":url})
- lib.write(js)
- return JsonResponse({"code":1})
- else:
- js=[
- {"class":cls,"items":[
- {"title":title,"url":url}]
- }
- ]
- lib.write(js)
- return JsonResponse({"code": 1})
- if "action" in request.GET.keys() and request.GET["action"]=="del":
- cls,title=request.POST["class"],request.POST["title"]
- js=lib.read()
- if js and "class" in js[0].keys():
- clss=[item["class"] for item in js]
- i=clss.index(cls)
- if i>=0:
- items=js[i]["items"]
- for item in items[:]:
- if item["title"]==title:
- items.remove(item)
- lib.write(js)
- return JsonResponse({"code":1})
- return JsonResponse({"code": 0})
- def forbid(request:HttpRequest):
- return HttpResponseForbidden()
python-数据处理函数库lib.py
- #lib
- from navigate.settings import BASE_DIR
- import os
- import pickle
- import json
-
- def read():
- js=os.path.join(BASE_DIR,'js')
- if os.path.exists(js):
- with open(js,'r') as f:
- return json.loads(f.read())
- # return pickle.load(f)
- else:
- return []
- def write(obj):
- js = os.path.join(BASE_DIR, 'js')
- with open(js,'w') as f:
- f.write(json.dumps(obj))
- # pickle.dump(obj,f)