2015-12-29 24 views
1

我有python模塊做一些東西,我需要保存數據庫中的少數項目。我需要什麼最小的文件使用django ORM

Currenlt我使用原始的sql來插入數據。但我想用django ORM。

我不需要任何網址,訪問量等我想要的,我可以創建模型,然後應該能夠將其保存像

user.save()

現在我不希望有不必要的文件和數據在那裏。但我不確定我需要哪些文件。我是否需要

settings.py 
urls.py 
views.py 
app folder. 

是它剛剛models.py,然後在設置DATABASE config可能。

我還需要創建一個應用程序以及

+3

如果你想要的只是ORM,你可以試試[SQLAlchemy](http://docs.sqlalchemy.org/en/rel_1_0/orm/tutorial.html)而不是Django。 –

+0

@YaroslavAdmin我看了一下。我無法完全掌握它。我不想花更多的時間先學習它 –

回答

6

您需要settings.py。你不需要urls.py或views.py。您需要一個應用程序文件夾,並在settings.py中的INSTALLED_APPS下創建該應用程序。雖然有手動發現應用程序的方法,但它可能比您希望進入的工作更多。

您還需要運行遷移,並在此過程中創建遷移目錄和文件。

裏面的應用程序的目錄,你真正需要的是__init__.py文件的遷移目錄和models.py文件

在models.py,有「從django.db進口車型」和然後讓模型從models.Model繼承。

得到所有的準備,並且你已經有了一個初具雛形的Django設置爲使用模型來與數據庫交互

編輯

玩弄這一點,我開始了新的Django 1.9項目,並開始屠宰settings.py文件,直到我破壞了一些東西。這是我開始:

""" 
Django settings for Test project. 

Generated by 'django-admin startproject' using Django 1.9. 

For more information on this file, see 
https://docs.djangoproject.com/en/1.9/topics/settings/ 

For the full list of settings and their values, see 
https://docs.djangoproject.com/en/1.9/ref/settings/ 
""" 

import os 

# Build paths inside the project like this: os.path.join(BASE_DIR, ...) 
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 


# Quick-start development settings - unsuitable for production 
# See https://docs.djangoproject.com/en/1.9/howto/deployment/checklist/ 

# SECURITY WARNING: keep the secret key used in production secret! 
SECRET_KEY = 'yp0at6d_bpr5a^j$6$#)(17tj8m5-^$p773lc6*jy%la!wu5!i' 

# SECURITY WARNING: don't run with debug turned on in production! 
DEBUG = True 

ALLOWED_HOSTS = [] 


# Application definition 

INSTALLED_APPS = [ 
    'django.contrib.admin', 
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 
    'modeltest', 
] 

MIDDLEWARE_CLASSES = [ 
    'django.middleware.security.SecurityMiddleware', 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.common.CommonMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
    'django.middleware.clickjacking.XFrameOptionsMiddleware', 
] 
ROOT_URLCONF = 'Test.urls' 

TEMPLATES = [ 
    { 
     'BACKEND': 'django.template.backends.django.DjangoTemplates', 
     'DIRS': [], 
     'APP_DIRS': True, 
     'OPTIONS': { 
      'context_processors': [ 
       'django.template.context_processors.debug', 
       'django.template.context_processors.request', 
       'django.contrib.auth.context_processors.auth', 
       'django.contrib.messages.context_processors.messages', 
      ], 
     }, 
    }, 
] 

WSGI_APPLICATION = 'Test.wsgi.application' 


# Database 
# https://docs.djangoproject.com/en/1.9/ref/settings/#databases 

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


# Password validation 
# https://docs.djangoproject.com/en/1.9/ref/settings/#auth-password-validators 

AUTH_PASSWORD_VALIDATORS = [ 
    { 
     'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', 
    }, 
    { 
     'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', 
    }, 
    { 
     'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', 
    }, 
    { 
     'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', 
    }, 
] 
# Internationalization 
# https://docs.djangoproject.com/en/1.9/topics/i18n/ 

LANGUAGE_CODE = 'en-us' 

TIME_ZONE = 'UTC' 

USE_I18N = True 

USE_L10N = True 

USE_TZ = True 


# Static files (CSS, JavaScript, Images) 
# https://docs.djangoproject.com/en/1.9/howto/static-files/ 

STATIC_URL = '/static/' 

我也做了一個樣本GitHub庫,所以你可以探索一個最小的設置看起來是什麼樣子。 https://github.com/RobertTownley/BarebonesDjango

件事我是可以不破壞數據庫交互,以執行(只要我所做的這一切在一次,之前遷移進行首次運行):從

  1. 刪除管理員,觀點和測試我的「模型測試」應用程序
  2. 刪除wsgi.py(假設這將永遠不會看到產品,也不會用於實際運行Web服務器)
  3. 從字面上刪除所有內容,並將其保留爲空白文件(不幸的是,settings.py期望ROOT_URLCONF指向某個東西)
  4. 從設置中刪除所有MIDDLEWARE_CLASSES。PY,使用模板,WSGI_APPLICATION,所有的國際化功能,DEBUG,ALLOWED_HOSTS,和所有的意見:)

沿着所以在這個實驗結束,我可以用我的準系統機型(包括添加新字段)與互動看起來像這樣settings.py文件:

import os 
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 
SECRET_KEY = 'v7j%&)-4$(p&tn1izbm0&#[email protected]#%!*xn&f^^)+o98jxprbe' 
INSTALLED_APPS = ['modeltest'] 
ROOT_URLCONF = 'BarebonesTest.urls' 
DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.sqlite3', 
     'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), 
    } 
} 

如果我知道sqlitedb的所需位置的確切文件路徑,或者切換到Postgres的/ MySQL的,我可以擺脫import語句和BASE_DIR,帶來我的settings.py行總數減少到4實質性行(數據庫設置,root_url,installed_apps和secret_key)

我很想被證明是錯誤的(學習很有趣),但我不認爲你可以找到比這更小的settings.py文件:)

+0

謝謝你。可以給我一些應該在'設置中的行的示例。py'有一些無用的東西,如中間件,模板,記錄器等 –

+0

我做了一個小實驗,找到最小的設置,併爲整個項目做了github回購。我編輯了我的答案,以反映我的發現 –

+0

謝謝你! –

0

對於Django 1.9,我只需要運行django-admin startproject後得到的幾個文件:只有3個變量的settings.py和manage.py。這兩個代碼以及來自wsgi.py的代碼片段,以及一些基本的目錄結構元素可以幫助您實現獨立的ORM設置。而且,如果你不想進行遷移,你可以去掉manage.py。

以下是您如何操作以及鏈接到GitHub來自己玩。

項目結構:

├── data 
│   ├── __init__.py 
│   ├── migrations 
│   │   └── __init__.py 
│   └── models.py 
├── main.py 
├── manage.py 
└── settings.py 

data目錄和遷移目錄包含空__init__.py文件。樣品models.py文件的內容如下:

from django.db import models 

class User(models.Model): 
    name = models.CharField(max_length=255) 
    email = models.EmailField(max_length=255) 

manage.py文件是典型的Django manage.py文件。只要確保從一個全新的django-admin startproject命令,如果你把它複製更改設置PARAM在os.environ.setdefault

#!/usr/bin/env python 
import os 
import sys 

if __name__ == "__main__": 
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings") 
    from django.core.management import execute_from_command_line 
    execute_from_command_line(sys.argv) 

settings.py文件需要3個設置:數據庫,INSTALLED_APPS和SECRET_KEY。請參閱Django文檔於DB不在SQLite的:

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.sqlite3', 
     'NAME': 'sqlite.db', 
    } 
} 

INSTALLED_APPS = (
    'data', 
    ) 

SECRET_KEY = 'REPLACE_ME' 

真正的竅門是在main.py,這將是你可以編寫針對您的模型。顯然,你必須使用一些代碼從wsgi.py得到的東西與這兩條線工作:

from django.core.wsgi import get_wsgi_application 
application = get_wsgi_application() 

下面是一個示例main.py:

# Django specific settings 
import os 
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings") 

### Have to do this for it to work in 1.9.x! 
from django.core.wsgi import get_wsgi_application 
application = get_wsgi_application() 
############# 

# Your application specific imports 
from data.models import * 

#Add user 
user = User(name="someone", email="[email protected]") 
user.save() 

# Application logic 
first_user = User.objects.all()[0] 

print(first_user.name) 
print(first_user.email) 

This projectthis post一起是有益的出發點對我來說,找到答案,並且我的與Django 1.9工作代碼的pull request被合併了,所以你現在可以從masnun的repo中獲取代碼。如果您知道更好的方法,請提交拉取請求。

相關問題