之前已通过pip去安装好了Django,现在接着参考: Getting Started with Django – Introduction and Tutorial (之前页面已失效:Writing your first Django app, part 1)
去折腾第一个django的app:
1.创建名为firstApp的项目:
E:\Dev_Root\WebServer\Django\fisrtApp>django-admin.py startproject firstApp E:\Dev_Root\WebServer\Django\fisrtApp>
2. 然后,验证是否正常工作:
E:\Dev_Root\WebServer\Django\fisrtApp\firstApp>dir 驱动器 E 中的卷是 Develop 卷的序列号是 0003-B490 E:\Dev_Root\WebServer\Django\fisrtApp\firstApp 的目录 2012/10/14 18:39 <DIR> . 2012/10/14 18:39 <DIR> .. 2012/10/14 18:39 <DIR> firstApp 2012/10/14 18:39 261 manage.py 1 个文件 261 字节 3 个目录 2,133,356,544 可用字节 E:\Dev_Root\WebServer\Django\fisrtApp\firstApp>manage.py runserver Validating models... 0 errors found Django version 1.4.1, using settings 'firstApp.settings' Development server is running at http://127.0.0.1:8000/ Quit the server with CTRL-BREAK.
可见,是可以正常工作的。
3.去访问: http://127.0.0.1:8000/ 可以看到Django已经正常运行了:
4.然后去把
E:\Dev_Root\WebServer\Django\fisrtApp\firstApp\firstApp\settings.py
中的配置改为自己的:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'. 'NAME': 'E:/Dev_Root/WebServer/Django/fisrtApp/firstApp/firstApp/db/sqlite3_firstApp.db', # Or path to database file if using sqlite3. 'USER': '', # Not used with sqlite3. 'PASSWORD': '', # Not used with sqlite3. 'HOST': '', # Set to empty string for localhost. Not used with sqlite3. 'PORT': '', # Set to empty string for default. Not used with sqlite3. } } # Local time zone for this installation. Choices can be found here: # http://en.wikipedia.org/wiki/List_of_tz_zones_by_name # although not all choices may be available on all operating systems. # In a Windows environment this must be set to your system time zone. #TIME_ZONE = 'America/Chicago' TIME_ZONE = 'Asia/Shanghai'
5. 接着再去运行manage.py syncdb:
E:\Dev_Root\WebServer\Django\fisrtApp\firstApp>manage.py syncdb Creating tables ... Creating table auth_permission Creating table auth_group_permissions Creating table auth_group Creating table auth_user_user_permissions Creating table auth_user_groups Creating table auth_user Creating table django_content_type Creating table django_session Creating table django_site You just installed Django's auth system, which means you don't have any superusers defined. Would you like to create one now? (yes/no): yes Username (leave blank to use 'administrator'): admin E-mail address: [email protected] Password: Password (again): Superuser created successfully. Installing custom SQL ... Installing indexes ... Installed 0 object(s) from 0 fixture(s)
相应的,也看到了
E:\Dev_Root\WebServer\Django\fisrtApp\firstApp\firstApp\db
下面有了db文件:sqlite3_firstApp.db
6. 然后去启动poll的app:
E:\Dev_Root\WebServer\Django\fisrtApp\firstApp>manage.py startapp polls E:\Dev_Root\WebServer\Django\fisrtApp\firstApp>
然后再给models.py添加内容,变为:
from django.db import models # Create your models here. class Poll(models.Model): question = models.CharField(max_length=200) pub_date = models.DateTimeField('date published') class Choice(models.Model): poll = models.ForeignKey(Poll) choice = models.CharField(max_length=200) votes = models.IntegerField()
再添加到settings.py中:
INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', # Uncomment the next line to enable the admin: # 'django.contrib.admin', # Uncomment the next line to enable admin documentation: # 'django.contrib.admindocs', 'polls', )
再接着运行:
E:\Dev_Root\WebServer\Django\fisrtApp\firstApp>manage.py sql polls BEGIN; CREATE TABLE "polls_poll" ( "id" integer NOT NULL PRIMARY KEY, "question" varchar(200) NOT NULL, "pub_date" datetime NOT NULL ) ; CREATE TABLE "polls_choice" ( "id" integer NOT NULL PRIMARY KEY, "poll_id" integer NOT NULL REFERENCES "polls_poll" ("id"), "choice" varchar(200) NOT NULL, "votes" integer NOT NULL ) ; COMMIT;
然后又试了一堆命令:
E:\Dev_Root\WebServer\Django\fisrtApp\firstApp>manage.py validate 0 errors found E:\Dev_Root\WebServer\Django\fisrtApp\firstApp>manage.py sqlcustom polls E:\Dev_Root\WebServer\Django\fisrtApp\firstApp>manage.py sqlclear polls E:\Dev_Root\WebServer\Django\fisrtApp\firstApp>manage.py sqlindexes polls BEGIN; CREATE INDEX "polls_choice_763e883" ON "polls_choice" ("poll_id"); COMMIT; E:\Dev_Root\WebServer\Django\fisrtApp\firstApp>manage.py sqlall polls BEGIN; CREATE TABLE "polls_poll" ( "id" integer NOT NULL PRIMARY KEY, "question" varchar(200) NOT NULL, "pub_date" datetime NOT NULL ) ; CREATE TABLE "polls_choice" ( "id" integer NOT NULL PRIMARY KEY, "poll_id" integer NOT NULL REFERENCES "polls_poll" ("id"), "choice" varchar(200) NOT NULL, "votes" integer NOT NULL ) ; CREATE INDEX "polls_choice_763e883" ON "polls_choice" ("poll_id"); COMMIT; E:\Dev_Root\WebServer\Django\fisrtApp\firstApp>
接着同步数据库:
E:\Dev_Root\WebServer\Django\fisrtApp\firstApp>manage.py syncdb Creating tables ... Creating table polls_poll Creating table polls_choice Installing custom SQL ... Installing indexes ... Installed 0 object(s) from 0 fixture(s)
然后测试了添加一个poll:
E:\Dev_Root\WebServer\Django\fisrtApp\firstApp>manage.py shell Python 2.7.2 (default, Jun 12 2011, 14:24:46) [MSC v.1500 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. (InteractiveConsole) >>> from polls.models import Poll,Choice >>> Poll.objects.all() [] >>> from django.utils import timezone >>> p = Poll(question="What's new?", pub_date=timezone.now()) >>> p.save() >>> p.id 1 >>> p.question "What's new?" >>> p.pub_date datetime.datetime(2012, 10, 14, 12, 46, 24, 445000, tzinfo=<UTC>) >>> p.question = "What's up?" >>> p.save() >>> Poll.objects.all() [<Poll: Poll object>] >>>
然后继续试了试,都是正常的:
E:\Dev_Root\WebServer\Django\fisrtApp\firstApp>manage.py shell Python 2.7.2 (default, Jun 12 2011, 14:24:46) [MSC v.1500 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. (InteractiveConsole) >>> from polls.models import Poll,Choice >>> Poll.objects.all() [<Poll: What's up?>] >>> Poll.objects.filter(id=1) [<Poll: What's up?>] >>> Poll.objects.filter(question__startswith='What') [<Poll: What's up?>] >>> Poll.objects.get(pub_date__year=2012) <Poll: What's up?> >>> Poll.objects.get(id=2) Traceback (most recent call last): File "<console>", line 1, in <module> File "E:\dev_install_root\Python27\lib\site-packages\django\db\models\manager.py", line 131, in get return self.get_query_set().get(*args, **kwargs) File "E:\dev_install_root\Python27\lib\site-packages\django\db\models\query.py", line 366, in get % self.model._meta.object_name) DoesNotExist: Poll matching query does not exist. >>> Poll.objects.get(pk=1) <Poll: What's up?> >>> p = Poll.objects.get(pk=1) >>> p.was_published_recently() Traceback (most recent call last): File "<console>", line 1, in <module> File "E:\Dev_Root\WebServer\Django\fisrtApp\firstApp\polls\models.py", line 11, in was_published_recently return self.pub_date >= (timezone.now() - datetime.timedelta(days=1)); NameError: global name 'timezone' is not defined >>> p.was_published_recently() Traceback (most recent call last): File "<console>", line 1, in <module> File "E:\Dev_Root\WebServer\Django\fisrtApp\firstApp\polls\models.py", line 11, in was_published_recently def was_published_recently(self): NameError: global name 'timezone' is not defined >>> ^Z E:\Dev_Root\WebServer\Django\fisrtApp\firstApp>manage.py shell Python 2.7.2 (default, Jun 12 2011, 14:24:46) [MSC v.1500 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. (InteractiveConsole) >>> from polls.models import Poll,Choice >>> p = Poll.objects.get(pk=1) >>> p.was_published_recently() True >>> p = Poll.objects.get(pk=1) >>> p.choce_set.all() Traceback (most recent call last): File "<console>", line 1, in <module> AttributeError: 'Poll' object has no attribute 'choce_set' >>> p.choice_set.all() [] >>> p.choice_set.create(choice='Not much', votes=0) <Choice: Not much> >>> p.choice_set.create(choice='The sky', votes=0) <Choice: The sky> >>> c = p.choice_set.create(choice='Just hacking again', votes=0) >>> c.poll <Poll: What's up?> >>> p.choice_set.all() [<Choice: Not much>, <Choice: The sky>, <Choice: Just hacking again>] >>> p.choice_set.count() 3 >>> Choice.objects.filter(poll__pub_date__year=2012) [<Choice: Not much>, <Choice: The sky>, <Choice: Just hacking again>] >>> c = p.choice_set.filter(choice__startswith='Just hacking') >>> c.delete() >>>
至此,第一个app,就结束了。