之前讲过django的一些个东西,所以就不详细讲解了。主要说一下django是真怎使用已有数据库的(之前都是建立一个新的),还就是静态文件的问题,(setting部分)。
先把setting贴上来:
1 # Django settings for CatchShow project. 2 import os.path 3 4 DEBUG = True 5 TEMPLATE_DEBUG = DEBUG 6 7 ADMINS = ( 8 # ('Your Name', 'your_email@example.com'), 9 ) 10 11 HERE = os.path.abspath(os.path.dirname(__file__)) 12 13 MANAGERS = ADMINS 14 15 DATABASES = { 16 'default': { 17 'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'. 18 # 'NAME': 'Oj', # Or path to database file if using sqlite3. 19 'NAME': 'test', 20 'USER': 'root', # Not used with sqlite3. 21 'PASSWORD': '123', # Not used with sqlite3. 22 'HOST': '', # Set to empty string for localhost. Not used with sqlite3. 23 'PORT': '', # Set to empty string for default. Not used with sqlite3. 24 } 25 } 26 27 # Local time zone for this installation. Choices can be found here: 28 # http://en.wikipedia.org/wiki/List_of_tz_zones_by_name 29 # although not all choices may be available on all operating systems. 30 # On Unix systems, a value of None will cause Django to use the same 31 # timezone as the operating system. 32 # If running in a Windows environment this must be set to the same as your 33 # system time zone. 34 TIME_ZONE = 'Asia/Shanghai' 35 36 # Language code for this installation. All choices can be found here: 37 # http://www.i18nguy.com/unicode/language-identifiers.html 38 LANGUAGE_CODE = 'zh-CN' 39 40 SITE_ID = 1 41 42 # If you set this to False, Django will make some optimizations so as not 43 # to load the internationalization machinery. 44 USE_I18N = True 45 46 # If you set this to False, Django will not format dates, numbers and 47 # calendars according to the current locale 48 USE_L10N = True 49 50 # Absolute filesystem path to the directory that will hold user-uploaded files. 51 # Example: "/home/media/media.lawrence.com/media/" 52 MEDIA_ROOT= ''#'os.path.join(HERE,'static') 53 54 # URL that handles the media served from MEDIA_ROOT. Make sure to use a 55 # trailing slash. 56 # Examples: "http://media.lawrence.com/media/", "http://example.com/media/" 57 MEDIA_URL = '/media/' 58 #MEDIA_URL = '' 59 60 # Absolute path to the directory static files should be collected to. 61 # Don't put anything in this directory yourself; store your static files 62 # in apps' "static/" subdirectories and in STATICFILES_DIRS. 63 # Example: "/home/media/media.lawrence.com/static/" 64 STATIC_ROOT = os.path.join(HERE,'static').replace('\\','/') 65 66 # URL prefix for static files. 67 # Example: "http://media.lawrence.com/static/" 68 #STATIC_URL = '/static/' 69 STATIC_URL = '/images/' 70 71 # URL prefix for admin static files -- CSS, JavaScript and images. 72 # Make sure to use a trailing slash. 73 # Examples: "http://foo.com/static/admin/", "/static/admin/". 74 ADMIN_MEDIA_PREFIX = '/static/admin/' 75 76 # Additional locations of static files 77 STATICFILES_DIRS = ( 78 ("hdoj","/home/duoduo/images/hdoj"), 79 "/home/duoduo/images", 80 #"/home/duoduo/data/images/hdoj", 81 # Put strings here, like "/home/html/static" or "C:/www/django/static". 82 # Always use forward slashes, even on Windows. 83 # Don't forget to use absolute paths, not relative paths. 84 ) 85 86 # List of finder classes that know how to find static files in 87 # various locations. 88 STATICFILES_FINDERS = ( 89 'django.contrib.staticfiles.finders.FileSystemFinder', 90 'django.contrib.staticfiles.finders.AppDirectoriesFinder', 91 # 'django.contrib.staticfiles.finders.DefaultStorageFinder', 92 ) 93 94 # Make this unique, and don't share it with anybody. 95 SECRET_KEY = 'j#c+cf(ufoc^!)7ozqxlibwm218n1&%8bl0-utx7i$tlry$_6v' 96 97 # List of callables that know how to import templates from various sources. 98 TEMPLATE_LOADERS = ( 99 'django.template.loaders.filesystem.Loader', 100 'django.template.loaders.app_directories.Loader', 101 # 'django.template.loaders.eggs.Loader', 102 ) 103 104 MIDDLEWARE_CLASSES = ( 105 'django.middleware.common.CommonMiddleware', 106 'django.contrib.sessions.middleware.SessionMiddleware', 107 'django.middleware.csrf.CsrfViewMiddleware', 108 'django.contrib.auth.middleware.AuthenticationMiddleware', 109 'django.contrib.messages.middleware.MessageMiddleware', 110 ) 111 112 ROOT_URLCONF = 'CatchShow.urls' 113 114 TEMPLATE_DIRS = ( 115 os.path.join(HERE, 'templates').replace('\\','/'), 116 # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates". 117 # Always use forward slashes, even on Windows. 118 # Don't forget to use absolute paths, not relative paths. 119 ) 120 121 INSTALLED_APPS = ( 122 'django.contrib.auth', 123 'django.contrib.contenttypes', 124 'django.contrib.sessions', 125 'django.contrib.sites', 126 'django.contrib.messages', 127 'django.contrib.staticfiles', 128 # Uncomment the next line to enable the admin: 129 'django.contrib.admin', 130 # Uncomment the next line to enable admin documentation: 131 # 'django.contrib.admindocs', 132 'hdoj', 133 'toj', 134 ) 135 136 # A sample logging configuration. The only tangible logging 137 # performed by this configuration is to send an email to 138 # the site admins on every HTTP 500 error. 139 # See http://docs.djangoproject.com/en/dev/topics/logging for 140 # more details on how to customize your logging configuration. 141 LOGGING = { 142 'version': 1, 143 'disable_existing_loggers': False, 144 'handlers': { 145 'mail_admins': { 146 'level': 'ERROR', 147 'class': 'django.utils.log.AdminEmailHandler' 148 } 149 }, 150 'loggers': { 151 'django.request': { 152 'handlers': ['mail_admins'], 153 'level': 'ERROR', 154 'propagate': True, 155 }, 156 } 157 }
先说使用数据库部分,在可以看到,我数据库的NAME = 'test',把路径切换到test下面 python manage.py help 回发现里面有一堆的命令,这次需要用的那就是这三个:inspectdb(使用现有数据库)、collectstatic(把静态文件存到设置的static文件下)。
好的,显示inspectdb,上图先:
额,出现来了这么咄admin的类,这几行无大有所为,因为我启用来admin界面管理,它在我数据库里面加了一堆表,原来只有hdoj的时候只有这一个。
然后把这个Hodj的class粘到hdoj的models.py里面去就ok了,已有数据库就能用了,比较容易。
接着是静态文件,STATIC_URL = '/images/',说明模板里面只有有地方叫做/images/,django就会去查找你静态文件的路径去引用的想用到的文件。而这STATICFILES_DIRS = ( ("hdoj","/home/duoduo/images/hdoj"),"/home/duoduo/images",)个就是你设置的静态文件路径(本地);最后STATIC_ROOT = os.path.join(HERE,'static').replace('\\','/')就是你项目里面的静态文件。
在用之前说的collectstatic,运行之后会是这个样子:
点击yes后,会发现生成了一个static文件夹,static文件夹里面又有这些东西:
解释:通过collectstatic之后,文件可以直接加到你的STATIC_ROOT下,而保存的方式就有点意思了,看:STATICFILES_DIRS,如果是一个元组,比如("hdoj","/home/duoduo/images/hdoj"),则把/home/duoduo/images/hdoj里的东西 存到static/hdoj/下面,如果是个字符串"/home/duoduo/images",那么就直接存到STATIC_ROOT根目录下,当然了,就算不执行collectstatic,依然可以引用静态文件。
比如这张图:
图片路径是<img src = '/images/hdoj/1056-1.gif'>,由于我们STATIC_URL = '/images/',那么django在看到这个前缀后就会查找/home/duoduo/images/hdoj/1056-1.gif,然后把它给显示出来。
urls.py和之前一样,直接贴上来就可以了,最后贴一下吧:1 from django.conf.urls.defaults import patterns, include, url 2 from django.conf import settings 3 from django.contrib import admin 4 from CatchShow.hdoj import views as hdojViews 5 from CatchShow.toj import views as tojViews 6 from django.conf.urls.static import static 7 import os 8 admin.autodiscover() 9 10 urlpatterns = patterns('', 11 url(r'^$',hdojViews.homeIndex), 12 url(r'^hdoj/',hdojViews.index), 13 url(r'^toj/',tojViews.index), 14 url(r'^admin/', include(admin.site.urls)), 15 url(r'^showhdojproblemid=(?P\d{4})$',hdojViews.showProblem), 16 url(r'^showtojproblemid=(?P \d{4})$',tojViews.showProblem), 17 url(r'^media/(?P .*)$', 'django.views.static.serve',{ 'document_root': settings.MEDIA_ROOT },name='media'), 18 url(r'^static/(?P .*)$', 'django.views.static.serve',{ 'document_root': settings.STATIC_ROOT },name='static'), 19 20 )
这就是通过这次作业的一些记录,因为之前查找网上资料狠不明了,所以才想写一下,希望能帮助更多蛇友们,那句话说的好,let's good good study,day day up~