Más contenido relacionado La actualidad más candente (20) Similar a Python Development (MongoSF) (20) Python Development (MongoSF)3. API Basics
>>> from pymongo import Connection
>>> db = Connection().test_db
>>> db.test.insert({"x": 1})
ObjectId('4bdafd07e6fb1b351e000000')
>>> db.test.find_one()
{u'x': 1, u'_id':
ObjectId('4bdafd07e6fb1b351e000000')}
4. GridFS (setup)
>>> from pymongo import Connection
>>> import gridfs
>>>
>>> db = Connection().gridfs_example
>>> fs = gridfs.GridFS(db)
5. GridFS (before)
>>> f = fs.open("hello.txt", "w")
>>> f.write("hello ")
>>> f.write("world")
>>> f.close()
>>> g = fs.open("hello.txt")
>>> g.read()
'hello world'
>>> g.close()
7. GridFS (after)
>>> myfile = fs.new_file(location=[-74, 40.74])
>>> myfile.write("hello ")
>>> myfile.write("world,")
>>> myfile.writelines([" and have a ", "good day!"])
>>> myfile.close()
>>> out = fs.get(myfile._id)
>>> out.read()
'hello world, and have a good day!'
>>> out.location
[-74, 40.740000000000002]
10. Stored JS
>>> db.system_js.add1 = "function (x) { return x + 1; }"
>>> db.system_js.add1(5)
6.0
>>> del db.system_js.add1
http://dirolf.com/2010/04/05/stored-javascript-in-mongodb-and-pymongo.html
15. Similar to +
• A lot of Django doesn’t depend on django.db:
• URL dispatch, templates, I18N, caching, etc.
• Some things do:
• Models
• Auth
• Sessions
• Admin
16. settings.py
DATABASE_ENGINE = ''
DATABASE_NAME = ''
DATABASE_USER = ''
DATABASE_PASSWORD = ''
DATABASE_HOST = ''
DATABASE_PORT = ''
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
# 'django.contrib.sessions.middleware.SessionMiddleware',
# 'django.contrib.auth.middleware.AuthenticationMiddleware',
)
INSTALLED_APPS = (
# 'django.contrib.auth',
'django.contrib.contenttypes',
# 'django.contrib.sessions',
'django.contrib.sites',
)
17. Representing a Poll
{'question': 'Do MongoDB + Django <3 each other?',
'pub_date': datetime.datetime(2010, 1, 21),
'choices': [{'votes': 35, 'choice': 'Yes!'},
{'votes': 2, 'choice': 'No...'}]}
18. models.py (PyMongo)
def save_poll(question):
return db.polls.insert({"question": question,
"pub_date": datetime.utcnow()})
def all_polls():
return db.polls.find()
def add_choice(poll_id, choice):
db.polls.update({"_id": poll_id},
{"$push": {"choices": {"choice": choice,
"votes": 0}}})
def add_vote(poll_id, choice):
db.polls.update({"_id": poll_id},
{"$inc": {"choices.%d.votes" % choice: 1}})
http://api.mongodb.org/python
19. models.py (MongoKit)
class Poll(mongokit.Document):
structure = {"question": str,
"pub_date": datetime,
"choices": [{"choice": str,
"votes": int}]}
required_fields = ["question"]
default_values = {"pub_date": datetime.utcnow}
http://bytebucket.org/namlook/mongokit
20. models.py (Ming)
class Poll(ming.Document):
class __mongometa__:
session = session
name = "polls"
_id = ming.Field(ming.schema.ObjectId)
question = ming.Field(str, required=True)
pub_date = ming.Field(datetime.datetime,
if_missing=datetime.datetime.utcnow)
choices = ming.Field([{"choice": str,
"votes": int}])
http://merciless.sourceforge.net/
21. mango - sessions and auth
• Full sessions support
• mango provided User class
• supports is_authenticated(), set_password(), etc.
http://github.com/vpulim/mango
22. mango - sessions and auth
SESSION_ENGINE = 'mango.session'
AUTHENTICATION_BACKENDS = ('mango.auth.Backend',)
MONGODB_HOST = 'localhost'
MONGODB_PORT = None
MONGODB_NAME = 'mydb'
http://github.com/vpulim/mango
23. What about admin?
• No great solution... yet.
• Could replace admin app like mango does
for sessions / auth
• Or...