如何在 Django Web 应用中实现 FirebaseDB

21

我正在尝试将Firebase实时数据库与我的Django Web应用程序一起使用。在正确配置Firebase后,我对如何从我的Django网站将数据编写到Firebase数据库中而不是使用Sqlite或者Postgres感到困惑。

settings.py 文件下,我需要将我的引擎设置为Firebase吗?我完全感到困惑。我不想使用常规的ORM,如Sqlite、Postgres等。我希望我的应用程序使用Firebase。

还有其他关于Firebase需要了解的事情吗?

settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

pyrebase_settings 文件

import pyrebase

config = {
    "apiKey": "my_api_key_is_here",
    "authDomain": "my_auth_domain_is_here",
    "databaseURL": "my_firebase_database_url_is_here",
    "projectId": "my_firebase_project_id_is_here",
    "storageBucket": "my_firebase_storageBucket_is_here",
    "serviceAccount": "my_serviceAccount.json_file_path_is_here",
    "messagingSenderId": "messagingSenderId_is_here"
}

# initialize app with config
firebase = pyrebase.initialize_app(config)

# authenticate a user
auth = firebase.auth()
user = auth.sign_in_with_email_and_password("email@usedforauthentication.com", "FstrongPasswordHere")


db = firebase.database()
5个回答

13

请查看文档中的数据库部分。它详细介绍了如何与数据库API进行交互。通常情况下,您会在视图中使用这些功能,以便从数据库中保存或检索数据。

例如,如果您想要一个获取用户的视图,您可以编写如下代码:

#views.py
from pyrebase_settings import db, auth
from django.shortcuts import render

def get_users(request):
    users = db.child("users").get()
    return render(request, 'users.html', {'users': users.val()})

检索数据的文档可以在这里看到。

如果你想要一个视图来保存(注册)用户,你可以像这样:

#views.py
from pyrebase_settings import db, auth

def signup(request):
   form = SignupForm(request.POST)
   if form.is_valid():
       email = form.cleaned_data('email')
       password = form.cleaned_data('password')
       auth.create_user_with_email_and_password(email, password)
   # the rest of your code goes here

create_user_with_email_and_password方法的文档在这里

PS. 我从未使用过pyrebase库,所以我只是根据其文档编写。此外,我只是凭记忆编写这些django代码片段,如果有语法错误或打字错误,请谅解 :)

希望这有所帮助 :)


这并没有回答问题。OP想要使用Firebase作为主要数据存储,而不是使用Sqlite或Postgres。标准的Django无法做到这一点。 - Paul Bissex
1
@PaulBissex 我的回答并没有涉及sqlite或postgres。我的回答只是详细解释了他们如何在Django视图中使用pyrebase。 - ifedapo olarewaju

8

有关Firebase,我还需要了解其他什么吗?

不,你需要了解有关Django的一些事情 -- 它是设计为使用关系型数据库引擎作为主要数据存储库的。Firebase并非关系型。

很抱歉告诉你这个不好的消息。

许多该问题的答案都没有注意到这一点,并建议使用代码或库来从Python访问Firebase。当然,这是可能的。但是,这不能让它成为Django的主要数据存储库。Django的ORM功能和contrib应用程序都假定关系型数据库。

为了使其工作,您需要类似于django-nonrel的东西来支持Firebase。据我所知,这种东西并不存在。


3

1
这并没有回答问题。OP想要使用Firebase作为主要数据存储,而不是使用Sqlite或Postgres。 - Paul Bissex

0

我在Web Django中获取HTML中的多个文件并将这些文件上传到Firebase存储的解决方案

index.html

<div id="fine-uploader-manual-trigger">
<input class="custom-file" type="file" name="imgname" id="productImgUpload" accept=".xlsx,.xls,image/*,.doc,audio/*,.docx,video/*,.ppt,.pptx,.txt,.pdf" multiple>
</div> 

views.py

from firebase import Firebase

def storeimg(request):
  config = {
            "apiKey": "",
            "authDomain": "",
            "databaseURL": "",
            "storageBucket": ""
        }
  firebase = Firebase(config)
  storage = firebase.storage()
  finalimglist = []
  imglist = []
  for i in range(len(filepath)):
       storage.child("Product/"+cname+"/"+str(filepath[i])).put(filepath[i])
       imgurl = storage.child("Product/"+cname+"/"+str(filepath[i])).get_url(token='null')
       imglist.append(imgurl)

  finalimglist.append(imglist)

4
这并不回答问题。原帖的意思是希望使用 Firebase 作为主要数据存储,而不是使用 Sqlite 或 Postgres。 - Paul Bissex

-1

Pyrebase是Firebase的Python封装。我不建议使用Pyrebase,因为它滞后于Firestore和FCM的支持。既然Django中的所有操作都在服务器端完成,为什么不在Django服务器上使用Firebase Admin SDK呢?您还可以使用它来管理用户。我的意思是,有很好的文档可以将Firebase添加到我们的服务器中。此外,他们还提供了Python、NodeJS等语言的服务器文档。我知道这有点像API的东西。但我认为这是在Django中正确的做法,因为Django是一个服务器应用程序。请查看link


1
这并没有回答问题。原帖中想要使用 Firebase 作为主要数据存储,"而不是使用 Sqlite 或者 Postgres"。 - Paul Bissex
需要注意的是 Firebase 并不直接支持 Django。不过,Firebase 支持 Python,您可以在服务器端使用 Admin SDK。希望这能够澄清问题。如需了解更多信息,请观看 JenPerson 的这个视频:https://www.youtube.com/watch?v=yylnC3dr_no。 - Mohith7548

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接