from django.shortcuts import render, redirect, get_object_or_404 from django.contrib.auth.decorators import login_required from django.views.generic import TemplateView from pathlib import Path import markdown import os from .models import IPManagementRecord from blog.models import Post from board_notice.models import BoardNotice from django.db.models import Q class LandingPageView(TemplateView): template_name = "butler/landing.html" def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) # context['var'] var를 templates로 전달해서 보여지는 것. context['blog_posts'] = Post.objects.order_by('-created_at')[:3] context['board_notices'] = BoardNotice.objects.order_by('-created_at')[:3] return context # --- ip management --- # def ip_mgmt_view(request): # # records = IPManagementRecord.objects.all() # if request.user.is_authenticated: # # records = IPManagementRecord.objects.filter(author=request.user).order_by( # records = IPManagementRecord.objects.order_by( # "ip_addrs" # ) # else: # # records = IPManagementRecord.objects.none() # records = IPManagementRecord.objects.all().order_by("ip_addrs") # return render(request, "butler/ip_mgmt.html", {"records": records}) def ip_mgmt_view(request): query = request.GET.get("var_search", "").strip() records = IPManagementRecord.objects.order_by( "ip_addrs" ) if query: records = records.filter( # Q(author__username__icontains=query) | Q(author__email__icontains=query) Q(author__username__icontains=query) | Q(network_nm__icontains=query) ) """ SELECT * FROM ip_management_record AS ip JOIN auth_user AS au ON ip.author_id = au.id WHERE au.username LIKE CONCAT('%', 조회할 값, '%') OR au.email LIKE CONCAT('%', 조회할 값, '%') ORDER BY ip.ip_addrs; """ records = records.order_by("ip_addrs") return render(request, "butler/ip_mgmt.html", {"records": records, "var_search": query}) def add_ip_record(request): if request.method == "POST": network_nm = request.POST.get("network_nm") ip_addrs = request.POST.get("ip_addrs") svr_nm = request.POST.get("svr_nm") desc = request.POST.get("desc") remark = request.POST.get("remark") # 작성자 (author)는 로그인된 사용자로 설정 author = request.user # 데이터 저장 IPManagementRecord.objects.create( network_nm=network_nm, ip_addrs=ip_addrs, svr_nm=svr_nm, desc=desc, remark=remark, author=author, ) return redirect("/ip_mgmt") def delete_ip_records(request): print(f"삭제동작") if request.method == "POST": selected_ids = request.POST.getlist("selected_records") if selected_ids: IPManagementRecord.objects.filter(id__in=selected_ids).delete() return redirect("/ip_mgmt") def edit_ip_record(request, pk): print(f"수정동작") record = get_object_or_404(IPManagementRecord, pk=pk) if request.method == "POST": # 디버깅 메시지 추가 # print(f"체크: {request.POST}") record.network_nm = request.POST.get("network_nm") record.ip_addrs = request.POST.get("ip_addrs") record.svr_nm = request.POST.get("svr_nm") record.desc = request.POST.get("desc") record.remark = request.POST.get("remark") record.save() return redirect("/ip_mgmt") return render(request, "butler/ip_mgmt.html", {"record": record}) # --- privacy def privacy_view(request): # 'docs/privacy.md' 파일을 읽기 file_path = os.path.join("docs", "docs_md_files/privacy.md") with open(file_path, "r", encoding="utf-8") as file: text = file.read() file_path = Path("docs/docs_md_files/privacy.md") with file_path.open("r", encoding="utf-8") as file: text = file.read() # Markdown을 HTML로 변환 # html_content = markdown.markdown(text) # Markdown을 HTML로 변환, tables 확장 활성화 html_content = markdown.markdown( text, extensions=[ "tables", # 테이블 지원 확장 ], ) # 변환된 HTML을 템플릿에 전달 return render(request, "butler/privacy.html", {"content": html_content}) def test_view(request): return render( request, "butler/test.html", )