Django와 함께 HarperDB 사용

12579 단어 djangoharperdb
Django 프로젝트에서 HarperDB를 사용하기 전에 고려해야 할 몇 가지 장단점이 있습니다. 먼저 이들 중 일부를 다루고 HarperDB와 Django가 적합하다고 판단되면 "방법"에 대해 알아보겠습니다.

이 글을 읽고 있다면 내 August Code Battle Hackathon의 참가자로 이 기사에 올 가능성이 높으므로 해당 참가자를 염두에 두고 작성하겠습니다.

장단점



이 시점에서 HarperDB와 Django는 서로 정확히 맞지 않는다는 점부터 말씀드리겠습니다. 대부분의 문제는 제가 videoarticle에서 MongoDB와 Django가 적합하지 않은 이유에 대해 말한 것과 유사하지만 운 좋게도 HarperDB는 훨씬 더 나은 위치에 있습니다.

MongoDB의 가장 큰 문제는 Django용 데이터베이스 드라이버가 없고 Django 쿼리를 NoSQL 쿼리로 변환하는 성공적인 구현이 없다는 것입니다. 결과적으로 Django가 구축한 많은 기능을 잃게 됩니다.

HarperDB에는 비슷한 문제가 있습니다. 현재 데이터베이스 드라이버가 없으므로 MongoDB와 동일한 문제가 발생합니다. HarperDB의 경우 SQL 및 NoSQL 분산 데이터베이스이므로 이 드라이버를 구축하는 것은 불가능한 작업이 아닙니다. 그들이 곧 그것을 할 수 있기를 바랍니다;)

한편 다음 사항을 고려하십시오.

  • 더 이상 Django ORM 없음 — 데이터베이스 어댑터가 없으면 Django ORM 대신 HarperDB python package을 사용해야 합니다.


  • No More Admin Panel — 어댑터가 없으면 필요한 적절한 마이그레이션을 실행할 수 없습니다.
  • 데이터베이스 연결 — settings.py의 DATABASES 연결 개체는 데이터베이스 드라이버 없이는 아무 것도 수행하지 않습니다.



  • 더 이상의 마이그레이션 없음 — 데이터베이스 드라이버 없이는 마이그레이션을 실행할 수 없습니다.



  • 인증 및 모델 — 이 부분은 아직 확실하지 않습니다. 더 이상 Django ORM을 사용하지 않는 경우 사용자 모델에서 인증이 어떻게 작동합니까? 이 부분은 처음부터 다시 작성해야 할 수도 있습니다.

  • 나의 제안



    FastAPI, Flask 또는 사용자 정의 기능을 사용하십시오.

    "FastAPI + React JS App With HarperDB 자습서"를 참조하십시오.

    경량 프레임워크를 사용하기로 선택한 경우 원하는 데이터베이스 연결을 만드는 데 필요한 유연성을 갖게 됩니다. 백엔드 구축을 모두 우회하고 HarperDB를 사용하여 API를 구축하고 프런트엔드에서 직접 데이터베이스에 연결할 수도 있습니다.

    안내 방법



    Source code

    준비된 데이터베이스와 사용할 준비가 된 빈 Django 앱이 있는 HarperDB 인스턴스 설정이 이미 있다고 가정하겠습니다. 그렇지 않은 경우 저를 따라 video tutorial for this article에서 설정할 수 있습니다.

    1 - HarperDB 패키지 설치



    HarperDB Python 패키지here를 설치할 수 있습니다. 이 패키지는 데이터베이스에 연결하고 쿼리를 만드는 데 필요한 도구를 제공합니다.

    pip install harperdb
    


    2 - 데이터베이스에 연결



    기본settings.py 개체 바로 위의 DATABASES에서 이 연결을 만들어 보겠습니다.

    #settings.py
    import harperdb
    
    ...
    
    DB = harperdb.HarperDB(
        url=<YOUR_HARPERDB_URL>,
        username=<YOUR_HARPERDB_USERNAME>,
        password=<YOUR_HARPERDB_PASSWORD>
    )
    


    3 - 쿼리 데이터베이스



    먼저 DB에서 settings.py 변수를 가져온 다음 데이터에 직접 액세스하여 뷰에서 데이터 액세스를 시작합니다.

    #views.py
    from django.conf import settings
    
    db = settings.DB
    
    def index(request):
        devs = db.search_by_value('hackathon', 'developers', "id", "*", get_attributes=['*'])
        context = {"devs":devs}
        return render(request, 'base/index.html', context)
    
    


    이제 템플릿에서 이 데이터를 렌더링하려면 컨텍스트 사전을 통해 전달되는 다른 쿼리 세트처럼 취급해야 합니다.

    <ul>
    {% for dev in devs %}
          <li>{{dev.name}}</li>
    {% endfor %}
    </ul>
    


    4 - CRUD 추가



    단일 항목 반환

    def dev_profile(request, pk):
        dev = db.search_by_hash('hackathon', 'developers', [pk], get_attributes=['*'])[0]
        context = {"dev":dev}
        return render(request, 'base/profile.html', context)
    


    항목 만들기

    from django.shortcuts import render, redirect
    
    #....
    
    def add_profile(request):
        if request.method == 'POST':
            data = request.POST
            db.insert('hackathon', 'developers', [{"name":data['name']}])
            return redirect('index')
        return render(request, 'base/form.html')
    


    항목 업데이트

    def update_profile(request, pk):
        if request.method == 'POST':
            data = request.POST
            db.update('hackathon', 'developers', [{"id":pk, "name":data["name"]}])
            return redirect('index')
    
        dev = db.search_by_hash('hackathon', 'developers', [pk], get_attributes=['*'])[0]
        return render(request, 'base/form.html', {"dev":dev})
    


    항목 삭제

    def delete_profile(request, pk):
        if request.method == 'POST':
            db.delete('hackathon', 'developers', [pk])
            return redirect('index')
    
        dev = db.search_by_hash('hackathon', 'developers', [pk], get_attributes=['*'])[0]
        return render(request, 'base/delete.html', {'dev':dev})
    


    이것이 데모용입니다!

    좋은 웹페이지 즐겨찾기