Django使用回憶:html
一、安裝django:python
pip install django==1.9
二、建立項目及應用:mysql
django-admin startproject web
django-admin startap blog
三、配置數據庫、二級url:web
web/setting.py: INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'blog', ] ... DATABASES = { 'default': { # 'ENGINE': 'django.db.backends.sqlite3', # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), 'ENGINE': 'django.db.backends.mysql', 'NAME':'test_blog', 'USER':'ahaii', 'PASSWORD':'123456', 'HOST':'', 'PORT':'', } }
web/urls.py: urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^blog/', include('blog.urls')), ]
blog/urls.py: from blog import views urlpatterns = [ url(r'^$', views.index), ]
blog/views.py: from django.shortcuts import render,HttpResponse # Create your views here. def index(request): return HttpResponse('Hello Django')
四、建立數據庫模型:sql
blog/models.py: from django.db import models # Create your models here. class Article(models.Model): title = models.CharField(max_length=100) category = models.CharField(max_length=50,blank=True) date_time = models.DateTimeField(auto_now_add=True) content = models.TextField(blank=True,null=True) def __unicode__(self): return self.title class Meta: ordering = ['-date_time']
五、同步數據庫:shell
python manage.py makemigrations
python manage.py migrate
其中,makemigrations是掃描變更後在本地的app目錄下的migrations包裏生成遷移用的代碼,可是並不會執行。migrate則是根據migrations包下的代碼操做數據庫,但並不檢查models的修改變更。因此更改models後應先makemigrations而後migrate。數據庫
六、建立超級用戶:django
python manage.py createsuperuser
七、利用python shell交互模式操做數據庫:session
python manage.py shell >>>from blog.models import Article >>>Article.objects.create(title='...',category='...',content='...')//插入數據 >>>Article.objects.all()//查詢全部記錄,返回列表 >>>Article.objects.get(id=1)//查詢第一條
>>>a=Article.objects.get(title='Car')
>>>a.content='The traffice is so busy!'//修改內容
>>>>a.save()//寫入數據庫
八、動態url:(獲取url中的參數)app
blog/views.py:
def detail(request,args):
post = Article.objects.all()[int(args)] //默認輸入爲字符串,轉換爲整型,列表索引
str = ('title=%s,category=%s,content=%s') %(post.title,post.category,post.content)
return HttpResponse(str)
blog/urls.py: urlpatterns = [ url(r'^$', views.index), url(r'(?P<args>\d+)/$',views.detail)// \w+可匹配數字和字母 ]
九、使用模版:
web項目下建立templates/test.html,設置模版路徑:
web/setting: TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [ os.path.join(BASE_DIR,'templates') ], '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', ], }, }, ]
templates/test.html: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Just for test template</title> <style> body{ background-color: red; } strong{ color:lightseagreen; } </style> </head> <body> <h1>Hello Django</h1> <strong>{{ time }}</strong> </body> </html>
blog/views:
from datetime import datetime def template(request): return render(request,'test.html',{'time':datetime.now()})
blog/urls: urlpatterns = [ url(r'template/$',views.template) ]
以上目錄結構:
web-| |-blog |-manage.py |-templates |-web
話說Django數據庫操做中get和filter的區別:
一、get:從數據庫中找到匹配的一條,返回一個知足查詢條件的對象。若沒有查到符合條件的數據,會發生錯誤。
二、filter:從數據庫中找到匹配的一條,返回一個知足查詢條件的列表。若沒有查到符合條件的數據,會返回一個口列表[]。