如何使用Django Web应用程序实现FirebaseDB

时间:2017-04-28 13:26:10

标签: django firebase firebase-realtime-database

我正在尝试使用我的Django Web应用程序实现Firebase实时数据库。在使用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 个答案:

答案 0 :(得分:9)

查看文档的database部分。它详细说明了如何与数据库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()})

可以看到检索数据的文档here

还说你想要一个保存(注册)用户的视图,你可以这样:

#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方法here

PS。我从未使用pyrebase库,因此我只根据其文档中指定的内容编写。另外,我只是写下这些django片段,如果有任何语法错误或拼写错误,请原谅我:)

希望这会有所帮助:)

答案 1 :(得分:2)

考虑在这里查看fcm-django库https://github.com/xtrinch/fcm-django

答案 2 :(得分:0)

Pyrebase是Firebase的python包装。我不建议使用Pyrebase,因为它不支持Firestore和FCM。当Django中的所有操作都在服务器端完成后,为什么不在Django服务器上使用 Firebase Admin SDK 。您也可以使用它来管理用户。我的意思是,有很好的文档将Firebase添加到我们的服务器。此外,他们还有用于服务器的Python,NodeJS等文档。我知道它倾向于使用API​​。但由于Django是服务器应用程序,因此我认为使用Django是正确的方法。看看这个link

答案 3 :(得分:0)

  

关于Firebase,我还需要了解其他内容吗?

不,关于Django,您需要了解一些内容-它旨在使用关系数据库引擎作为其主要数据存储库。 Firebase与关系无关。

很抱歉成为坏消息的承担者。

关于这个问题的许多答案都没有提到这一点,而是建议使用代码或库来从Python访问Firebase 。当然可以。但这不能使其用作Django的主要数据存储。 Django的ORM功能和contrib应用程序都假定一个关系数据库。

要使其正常工作,您需要遵循django-nonrel的支持Firebase的内容。据我所知,这是不存在的。

答案 4 :(得分:0)

我的解决方案,用于从html获取多个文件并将该文件上传到Web Django的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)