본문 바로가기
개발Study/IP Camera

make IP camera using raspberry pi 4 (6) web ui with django

by happy90 2022. 2. 9.
SMALL

대략 아래와 같은 UI를 만들고자 한다. 그림판으로 그려봤다.
지난번에 스트리밍에 실패해서 캡쳐화면만 남겨놨지만 refresh버튼을 눌러 언제든 화면갱신을 할 수 있도록 해보고자 한다.

노란선은 대략 table 모양이랄까.

역시 눈에 보이는건 순식간에 만들어진다.
여기서 refresh와 on/off 버튼들을 버튼으로 바꿔주어야 한다.

먼저 refresh 버튼을 해보자.
refresh의 기능은 위의 image를 갱신하는 것.

다음으로 구현해야 할 것은 db.
페이지를 불러올 때 db에서 motion, sound alarm설정값을 불러와서 화면에 표시해주어야 한다.
그리고 버튼을 눌렀을 때 db에 해당 값을 저장해주어야 한다.

지금은 버튼을 눌러도 아무런 동작을 하지 않는다.
모양을 다듬어보자.

온갖 구글링 다 해가면서 만들었는데 솔직히 맘에 안든다.
그러나 더 이상은 못하겠다. 표시할것만 표시하면 된다.....

html:

<!DOCTYPE html>
{% load static %}
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" type="text/css" href="{% static 'css/style.css' %}">
</head>
<body style="text-align:center;">
    <h1>dreaming my baby</h1>
    <img src="{% url 'video_feed' %}" width="50%" height="50%">
    <table align="center">
        <tr>
            <th> </th>
            <th> </th>
            <th> </th>
            <th align="right">
                <input type="button" class="button1" id="refresh" value="refresh">
            </th>
        </tr>
        <tr>
            <th align="left">alarm settings</th>
            <th> </th>
            <th> </th>
            <th> </th>
        </tr>
        <tr>
            <th align="right">motion</th>
            <th align="left">
                <label class="switch">
                    <input type="checkbox">
                    <span class="slider round"></span>
                </label>
            </th>
            <th align="right">sound</th>
            <th align="left">
                <label class="switch">
                    <input type="checkbox">
                    <span class="slider round"></span>
                </label>
            </th>
        </tr>
    </table>
</body>
</html>

css:

.switch {
  position: relative;
  display: inline-block;
  width: 60px;
  height: 34px;
}

.switch input {
  opacity: 0;
  width: 0;
  height: 0;
}

.slider {
  position: absolute;
  cursor: pointer;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background-color: #ccc;
  -webkit-transition: .4s;
  transition: .4s;
}

.slider:before {
  position: absolute;
  content: "";
  height: 26px;
  width: 26px;
  left: 4px;
  bottom: 4px;
  background-color: white;
  -webkit-transition: .4s;
  transition: .4s;
}

input:checked + .slider {
  background-color: #2196F3;
}

input:focus + .slider {
  box-shadow: 0 0 1px #2196F3;
}

input:checked + .slider:before {
  -webkit-transform: translateX(26px);
  -ms-transform: translateX(26px);
  transform: translateX(26px);
}
/* Rounded sliders */
.slider.round {
  border-radius: 34px;
}

.slider.round:before {
  border-radius: 50%;
}

@import url("https://fonts.googleapis.com/css2?family=Noto+Sans+KR&display=swap");
.button1 {
  -webkit-appearance: none;
  -moz-appearance: none;
  appearance: none;

  margin: 0;
  padding: 0.5rem 1rem;

  font-family: "Noto Sans KR", sans-serif;
  font-size: 2rem;
  font-weight: bold;
  text-align: center;
  text-decoration: none;

  display: inline-block;
  width: auto;

  border: none;
  border-radius: 5px;
}

table {
  width: 50%;
  font-size: 2rem;
}

 

다음엔 버튼기능 구현ㄱㄱ

LIST

댓글