[Django] alles starten uit 1 file

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Beste Tweakers,

Django start ik nu via de commandline via het volgende command: python manage.py sql MyApp.
Dit werkt goed en hij maakt de tabellen gewoon aan.

Maar nu wil ik graag 1 bestand aanroepen en roepen waar hij dat hele command uitvoert wat hier boven staat....
*Ben zelf niet echt thuis in Django/Python, maar heb er wel op lopen Googlen maar kan niet echt vinden wat ik zoek.

manage.py ziet er zo uit:

code:
1
2
3
4
if __name__ == "__main__":
     os.environ.setdefault("DJANGO_SETTINGS_MODULE", "MyApp.settings")
     from django.core.management import execute_from_command_line
     execute_from_command_line(sys.argv)

[ Voor 23% gewijzigd door Verwijderd op 23-05-2012 17:23 ]


Acties:
  • 0 Henk 'm!

  • WouZz
  • Registratie: Mei 2000
  • Niet online

WouZz

Elvis is alive!

Je zou er een .bat of .sh file-tje van kunnen maken? Die .sh moet je dan wel executable maken natuurlijk. Verder is er naast manage.py ook altijd een django-admin.py die dezelfde taken doet, maar op systeem niveau geinstalleerd staat en ook al executable is.

On track


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Is er geen alternatief?! Op zich is het ook geen probleem als je het 1 keer moet doen.
Maar dan vraag ik me af als je objecten gaat saven naar de database vanuit een ander bestand hoe kan je dat het beste doen? (Volgens mij moet hij namelijk wel je configuratie inlezen van je database...)

Acties:
  • 0 Henk 'm!

  • WouZz
  • Registratie: Mei 2000
  • Niet online

WouZz

Elvis is alive!

Wat bedoel je precies met "als je objecten gaat saven naar de database vanuit een ander bestand"? Als je binnen Django zit worden je settings en database connecties automatisch voor je geregeld. Misschien moet je even het "PHP idee" van direct .php bestanden aanroepen via de browser laten varen. Binnen Django worden (HTTP) urls opgevraagd die via je urls.py naar een view functie in je views.py matchen. Vanaf daar kan je doen wat je wilt met je models. Dit is een variant op het MVC design pattern wat je in PHP alleen in de betere frameworks tegenkomt.

Alleen als je command line dingen wilt doen moet je zorgen dat Django al geinitialiseerd is. Maar ook hiervoor is iets bedacht ;)

On track


Acties:
  • 0 Henk 'm!

  • Wolfboy
  • Registratie: Januari 2001
  • Niet online

Wolfboy

ubi dubium ibi libertas

Ik denk dat je op zoek bent naar syncdb: https://docs.djangoprojec.../ref/django-admin/#syncdb

Om je database weg te schrijven moet je dus dit uitvoeren:
./manage.py syncdb


Als je manage.py nog niet uitvoerbaar is (onder Linux/Unix):
chmod +x manage.py

Onder windows werkt dit gewoon:
manage.py syncdb

[ Voor 54% gewijzigd door Wolfboy op 24-05-2012 15:52 ]

Blog [Stackoverflow] [LinkedIn]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Volgens mij word ik niet helemaal goed begrepen...
Ik heb de koppeling naar de database en de modellen/tabbellen dus al werkend.

Nu heb 1 bestand (Main) die ik inlees met python en daarvan een hash maak (MD5 voor het gemak)
Dit print hij nu op me scherm maar wil ik in de database hebben.
Hoe krijg ik hem dan ipv op me scherm naar de database geschreven??

Ik weet dat die met de save() functie kan van Django maar dan moet de main wel zo ingericht zijn dat ik een koppeling heb met de database en dat hij me moddelen herkent...

Hoe kan ik dit het beste doen??

Acties:
  • 0 Henk 'm!

  • WouZz
  • Registratie: Mei 2000
  • Niet online

WouZz

Elvis is alive!

Verwijderd schreef op donderdag 24 mei 2012 @ 16:58:
[..] maar dan moet de main wel zo ingericht zijn dat ik een koppeling heb met de database en dat hij me moddelen herkent...
Door je 'Main' om te bouwen naar een custom command. Of nog beter, vanuit je custom command dezelfde functionaliteit aan te roepen. Zorg alleen dat je geen print van je hash doet, maar die aan je model meegeeft.

Maar je verhaal is inderdaad een beetje vaag. Begrijp ik goed dat je een hash maakt van het bestand dat je uitvoert?

On track


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
WouZz schreef op donderdag 24 mei 2012 @ 17:22:
[...]


Door je 'Main' om te bouwen naar een custom command. Of nog beter, vanuit je custom command dezelfde functionaliteit aan te roepen. Zorg alleen dat je geen print van je hash doet, maar die aan je model meegeeft.

Maar je verhaal is inderdaad een beetje vaag. Begrijp ik goed dat je een hash maakt van het bestand dat je uitvoert?
Me main ombouwen klinkt goed. Maar kan je een voorbeeld geven hoe ik dit doen kan?
Ik word uit die link niet veel wijzer namelijk.

En wat ik bedoel met een hash is als volgt: Ik lees een bestaand bestand in me python en maak daar een hash van. Deze print ik op het scherm en wil ik in de database hebben

Acties:
  • 0 Henk 'm!

  • Wolfboy
  • Registratie: Januari 2001
  • Niet online

Wolfboy

ubi dubium ibi libertas

Wat voor script heb je nu precies wat je wilt uitvoeren en wat gaat hier niet goed aan?

Ik begrijp totaal niet wat je precies probeert te doen.

Blog [Stackoverflow] [LinkedIn]


Acties:
  • 0 Henk 'm!

  • WouZz
  • Registratie: Mei 2000
  • Niet online

WouZz

Elvis is alive!

Python: my/management/commands/make_hash.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from django.core.management.base import BaseCommand, CommandError
from my.main import make_hash_oid
from my.models import Shop

class Command(BaseCommand):
    args = '<filename>'
    help = 'Make some really good hash'

    def handle(self, *args, **options):
        filename = args[0]
        file = open(filename)
        flowers = file.read()
        result = make_hash_oid(flowers)
        chilly = Shop()
        chilly.jungle = result
        chilly.save()


python manage.py make_hash filename.txt


:7

On track


Acties:
  • 0 Henk 'm!

  • t_captain
  • Registratie: Juli 2007
  • Laatst online: 11-09 22:49
Verwijderd schreef op donderdag 24 mei 2012 @ 16:58:
Volgens mij word ik niet helemaal goed begrepen...
Ik heb de koppeling naar de database en de modellen/tabbellen dus al werkend.

Nu heb 1 bestand (Main) die ik inlees met python en daarvan een hash maak (MD5 voor het gemak)
Dit print hij nu op me scherm maar wil ik in de database hebben.
Hoe krijg ik hem dan ipv op me scherm naar de database geschreven??

Ik weet dat die met de save() functie kan van Django maar dan moet de main wel zo ingericht zijn dat ik een koppeling heb met de database en dat hij me moddelen herkent...

Hoe kan ik dit het beste doen??
Als je wilt dar het voorbeeld werkt heb je natuurlijk wel een settings module nodig.

Benodigde files:
- MyApp/
- MyApp/settings.py (met daarin de correcte definitie van DATABASES, dict met tenminste key "default", databases["default"] is op zijn beurt een dict met daarin de connection settings.
- MyApp/__init__.py (mag leeg zijn).

Dan kon je gewoon je modellen querieen en opslaan waardoor je gebruik maar van de ORM functionaliteit van django. "manage.py sql" is eigenlijk alleen van belang om de schema definities van je ORM te checken.
Pagina: 1