CommonLisp에서 Caveman2를 사용하여 TODO 목록 앱을 만들어 보았습니다.
7766 단어 todocommon-lispcaveman2
소개
Caveman2를 사용하여 간단한 TODO 목록을 만들 수 있습니다.
사양은 다음과 같습니다.
프로젝트 템플릿 생성
REPL을 시작하고 다음 명령으로 프로젝트 템플릿을 만듭니다.
(ql:quickload :caveman2)
(caveman2:make-project #P"プロジェクトを作成するディレクトリのパス" :author "自分の名前")
(ql:register-local-projects) ; モジュールをlocal-projectsに登録
Caveman2 스켈레톤 프로젝트의 디렉토리 / 파일 구성
이번 괴롭히는 파일은 이하의 ★마크가 붙어 있는 파일입니다.
cl-caveman2-todo
├── README.markdown
├── app.lisp
├── db
│ ├── todolist.db ★ テーブル作成後に生成されるファイル
│ └── schema.sql
├── cl-caveman2-todo-test.asd
├── cl-caveman2-todo.asd
├── src
│ ├── config.lisp ★ SQLite3の設定関連
│ ├── db.lisp
│ ├── main.lisp
│ ├── view.lisp
│ └── web.lisp ★ ルーティング/SQL実行/結果反映など
├── static
│ └── css
│ └── main.css
├── templates
│ ├── _errors
│ │ └── 404.html
│ ├── index.html ★ テンプレートエンジン
│ └── layouts
│ └── default.html
└── tests
└── myapp.lisp
데이터베이스
데이터베이스에 대해서는, 이하의 기사에 기재한 것을 그대로 사용했습니다.
CommonLisp에서 Caveman2와 SQLite3을 사용하여 데이터베이스 작업을 시도했습니다.
템플릿
템플릿 엔진은 Djula입니다.
이것은 Python 장고 템플릿 엔진을 Common Lisp에 이식한 것 같습니다.
templates 디렉토리 아래에 index.html이라는 파일이 있으므로 다음과 같이 수정합니다.
templates/index.html{% extends "layouts/default.html" %}
{% block title %}Welcome to Caveman2{% endblock %}
{% block content %}
<div id="main">
<form action="/task-add" method="POST">
<input type="text" name="name" value="{{ tasks.name }}">
<input type="submit" value="追加">
</form>
<ul>
{% for task in tasks %}
<li>
{{ task.name }}
<form action="/task-delete" method="POST">
<input type="hidden" name="id" value="{{ task.id }}">
<input type="submit" value="削除">
</form>
</li>
{% endfor %}
</ul>
</div>
{% endblock %}
라우팅
추가 버튼을 눌렀을 때의 처리입니다.
src/web.lisp(defroute ("/task-add" :method :POST) (&key |name|)
(render-todo-list (insert-task |name|)))
삭제 버튼을 눌렀을 때의 처리입니다.
src/web.lisp(defroute ("/task-delete" :method :POST) (&key |id|)
(render-todo-list (delete-task |id|)))
SQL 실행 결과를 브라우저에 반영
Djula를 사용하여 데이터베이스에서 값을 검색하고 브라우저에 반영하려면 다음과 같이 작성하십시오.
(defun render-todo-list (tasks)
(render #P"index.html" `(:tasks ,(get-tasks tasks))))
(defun get-tasks (tasks)
(with-connection (db)
(retrieve-all
(select :* (from :tasks)))))
실행
다음 명령으로 시작합니다.
(ql:quickload :cl-caveman2-todo)
(cl-caveman2-todo.web::create-table) ; SQLite3でテーブル生成
(cl-caveman2-todo:start)
시작할 수 있으면 브라우저를 열고 http://localhost:5000/
로 이동합니다.
이하 실행중인 모습
다음 명령으로 중지하고 종료합니다.
(cl-caveman2-todo:stop)
마지막으로
Caveman2에서 간단한 TODO 목록 앱을 만들어 보았습니다.
좀 더 정교한 것을 만들려고 생각하면 더 공부하지 않으면 안되는 것 같네요・・・.
이번 소스 코드 세트는 Github에도 올리고 있기 때문에 좋으면 부디.
fireflower0/cl-caveman2-todo
Reference
이 문제에 관하여(CommonLisp에서 Caveman2를 사용하여 TODO 목록 앱을 만들어 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/fireflower0/items/e21f7d6a7504201770d3
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
(ql:quickload :caveman2)
(caveman2:make-project #P"プロジェクトを作成するディレクトリのパス" :author "自分の名前")
(ql:register-local-projects) ; モジュールをlocal-projectsに登録
이번 괴롭히는 파일은 이하의 ★마크가 붙어 있는 파일입니다.
cl-caveman2-todo
├── README.markdown
├── app.lisp
├── db
│ ├── todolist.db ★ テーブル作成後に生成されるファイル
│ └── schema.sql
├── cl-caveman2-todo-test.asd
├── cl-caveman2-todo.asd
├── src
│ ├── config.lisp ★ SQLite3の設定関連
│ ├── db.lisp
│ ├── main.lisp
│ ├── view.lisp
│ └── web.lisp ★ ルーティング/SQL実行/結果反映など
├── static
│ └── css
│ └── main.css
├── templates
│ ├── _errors
│ │ └── 404.html
│ ├── index.html ★ テンプレートエンジン
│ └── layouts
│ └── default.html
└── tests
└── myapp.lisp
데이터베이스
데이터베이스에 대해서는, 이하의 기사에 기재한 것을 그대로 사용했습니다.
CommonLisp에서 Caveman2와 SQLite3을 사용하여 데이터베이스 작업을 시도했습니다.
템플릿
템플릿 엔진은 Djula입니다.
이것은 Python 장고 템플릿 엔진을 Common Lisp에 이식한 것 같습니다.
templates 디렉토리 아래에 index.html이라는 파일이 있으므로 다음과 같이 수정합니다.
templates/index.html{% extends "layouts/default.html" %}
{% block title %}Welcome to Caveman2{% endblock %}
{% block content %}
<div id="main">
<form action="/task-add" method="POST">
<input type="text" name="name" value="{{ tasks.name }}">
<input type="submit" value="追加">
</form>
<ul>
{% for task in tasks %}
<li>
{{ task.name }}
<form action="/task-delete" method="POST">
<input type="hidden" name="id" value="{{ task.id }}">
<input type="submit" value="削除">
</form>
</li>
{% endfor %}
</ul>
</div>
{% endblock %}
라우팅
추가 버튼을 눌렀을 때의 처리입니다.
src/web.lisp(defroute ("/task-add" :method :POST) (&key |name|)
(render-todo-list (insert-task |name|)))
삭제 버튼을 눌렀을 때의 처리입니다.
src/web.lisp(defroute ("/task-delete" :method :POST) (&key |id|)
(render-todo-list (delete-task |id|)))
SQL 실행 결과를 브라우저에 반영
Djula를 사용하여 데이터베이스에서 값을 검색하고 브라우저에 반영하려면 다음과 같이 작성하십시오.
(defun render-todo-list (tasks)
(render #P"index.html" `(:tasks ,(get-tasks tasks))))
(defun get-tasks (tasks)
(with-connection (db)
(retrieve-all
(select :* (from :tasks)))))
실행
다음 명령으로 시작합니다.
(ql:quickload :cl-caveman2-todo)
(cl-caveman2-todo.web::create-table) ; SQLite3でテーブル生成
(cl-caveman2-todo:start)
시작할 수 있으면 브라우저를 열고 http://localhost:5000/
로 이동합니다.
이하 실행중인 모습
다음 명령으로 중지하고 종료합니다.
(cl-caveman2-todo:stop)
마지막으로
Caveman2에서 간단한 TODO 목록 앱을 만들어 보았습니다.
좀 더 정교한 것을 만들려고 생각하면 더 공부하지 않으면 안되는 것 같네요・・・.
이번 소스 코드 세트는 Github에도 올리고 있기 때문에 좋으면 부디.
fireflower0/cl-caveman2-todo
Reference
이 문제에 관하여(CommonLisp에서 Caveman2를 사용하여 TODO 목록 앱을 만들어 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/fireflower0/items/e21f7d6a7504201770d3
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
템플릿 엔진은 Djula입니다.
이것은 Python 장고 템플릿 엔진을 Common Lisp에 이식한 것 같습니다.
templates 디렉토리 아래에 index.html이라는 파일이 있으므로 다음과 같이 수정합니다.
templates/index.html
{% extends "layouts/default.html" %}
{% block title %}Welcome to Caveman2{% endblock %}
{% block content %}
<div id="main">
<form action="/task-add" method="POST">
<input type="text" name="name" value="{{ tasks.name }}">
<input type="submit" value="追加">
</form>
<ul>
{% for task in tasks %}
<li>
{{ task.name }}
<form action="/task-delete" method="POST">
<input type="hidden" name="id" value="{{ task.id }}">
<input type="submit" value="削除">
</form>
</li>
{% endfor %}
</ul>
</div>
{% endblock %}
라우팅
추가 버튼을 눌렀을 때의 처리입니다.
src/web.lisp(defroute ("/task-add" :method :POST) (&key |name|)
(render-todo-list (insert-task |name|)))
삭제 버튼을 눌렀을 때의 처리입니다.
src/web.lisp(defroute ("/task-delete" :method :POST) (&key |id|)
(render-todo-list (delete-task |id|)))
SQL 실행 결과를 브라우저에 반영
Djula를 사용하여 데이터베이스에서 값을 검색하고 브라우저에 반영하려면 다음과 같이 작성하십시오.
(defun render-todo-list (tasks)
(render #P"index.html" `(:tasks ,(get-tasks tasks))))
(defun get-tasks (tasks)
(with-connection (db)
(retrieve-all
(select :* (from :tasks)))))
실행
다음 명령으로 시작합니다.
(ql:quickload :cl-caveman2-todo)
(cl-caveman2-todo.web::create-table) ; SQLite3でテーブル生成
(cl-caveman2-todo:start)
시작할 수 있으면 브라우저를 열고 http://localhost:5000/
로 이동합니다.
이하 실행중인 모습
다음 명령으로 중지하고 종료합니다.
(cl-caveman2-todo:stop)
마지막으로
Caveman2에서 간단한 TODO 목록 앱을 만들어 보았습니다.
좀 더 정교한 것을 만들려고 생각하면 더 공부하지 않으면 안되는 것 같네요・・・.
이번 소스 코드 세트는 Github에도 올리고 있기 때문에 좋으면 부디.
fireflower0/cl-caveman2-todo
Reference
이 문제에 관하여(CommonLisp에서 Caveman2를 사용하여 TODO 목록 앱을 만들어 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/fireflower0/items/e21f7d6a7504201770d3
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
(defroute ("/task-add" :method :POST) (&key |name|)
(render-todo-list (insert-task |name|)))
(defroute ("/task-delete" :method :POST) (&key |id|)
(render-todo-list (delete-task |id|)))
Djula를 사용하여 데이터베이스에서 값을 검색하고 브라우저에 반영하려면 다음과 같이 작성하십시오.
(defun render-todo-list (tasks)
(render #P"index.html" `(:tasks ,(get-tasks tasks))))
(defun get-tasks (tasks)
(with-connection (db)
(retrieve-all
(select :* (from :tasks)))))
실행
다음 명령으로 시작합니다.
(ql:quickload :cl-caveman2-todo)
(cl-caveman2-todo.web::create-table) ; SQLite3でテーブル生成
(cl-caveman2-todo:start)
시작할 수 있으면 브라우저를 열고 http://localhost:5000/
로 이동합니다.
이하 실행중인 모습
다음 명령으로 중지하고 종료합니다.
(cl-caveman2-todo:stop)
마지막으로
Caveman2에서 간단한 TODO 목록 앱을 만들어 보았습니다.
좀 더 정교한 것을 만들려고 생각하면 더 공부하지 않으면 안되는 것 같네요・・・.
이번 소스 코드 세트는 Github에도 올리고 있기 때문에 좋으면 부디.
fireflower0/cl-caveman2-todo
Reference
이 문제에 관하여(CommonLisp에서 Caveman2를 사용하여 TODO 목록 앱을 만들어 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/fireflower0/items/e21f7d6a7504201770d3
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
(ql:quickload :cl-caveman2-todo)
(cl-caveman2-todo.web::create-table) ; SQLite3でテーブル生成
(cl-caveman2-todo:start)
(cl-caveman2-todo:stop)
Caveman2에서 간단한 TODO 목록 앱을 만들어 보았습니다.
좀 더 정교한 것을 만들려고 생각하면 더 공부하지 않으면 안되는 것 같네요・・・.
이번 소스 코드 세트는 Github에도 올리고 있기 때문에 좋으면 부디.
fireflower0/cl-caveman2-todo
Reference
이 문제에 관하여(CommonLisp에서 Caveman2를 사용하여 TODO 목록 앱을 만들어 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/fireflower0/items/e21f7d6a7504201770d3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)