課程介紹html
pip list
pip freeze
pip install django==1.8.2
pip install django==1.11.4
import django django.get_version()
django-admin startproject test1
在settings.py文件中,經過DATABASES項進行數據庫設置python
django支持的數據庫包括:sqlite、mysql等主流數據庫mysql
Django默認使用SQLite數據庫web
python manage.py startapp booktest
from django.db import models class BookInfo(models.Model): btitle = models.CharField(max_length=20) bpub_date = models.DateTimeField() def __str__(self): return "%d" % self.pk class HeroInfo(models.Model): hname = models.CharField(max_length=20) hgender = models.BooleanField() hcontent = models.CharField(max_length=100) hBook = models.ForeignKey('BookInfo') def __str__(self): return "%d" % self.pk
生成遷移文件:根據模型類生成sql語句正則表達式
python manage.py makemigrations
遷移文件被生成到應用的migrations目錄sql
執行遷移:執行sql語句生成數據表shell
python manage.py migrate
python manage.py shell
# 引入須要的包: from booktest.models import BookInfo,HeroInfo from django.utils import timezone from datetime import * # 查詢全部圖書信息: BookInfo.objects.all() # 新建圖書信息: b = BookInfo() b.btitle="射鵰英雄傳" b.bpub_date=datetime(year=1990,month=1,day=10) b.save() # 查找圖書信息: b=BookInfo.objects.get(pk=1) # 輸出圖書信息: b b.id b.btitle # 修改圖書信息: b.btitle=u"天龍八部" b.save() # 刪除圖書信息: b.delete() # 關聯對象的操做 # 對於HeroInfo能夠按照上面的操做方式進行 # 添加,注意添加關聯對象 h=HeroInfo() h.hname=u'郭靖' h.hgender=True h.hcontent=u'降龍十八掌' h.hBook=b h.save() # 得到關聯集合:返回當前book對象的全部hero b.heroinfo_set.all() # 有一個HeroInfo存在,必需要有一個BookInfo對象,提供了建立關聯的數據: h=b.heroinfo_set.create(hname=u'黃蓉',hgender=False,hcontent=u'打狗棍法')
python manage.py runserver ip:port
python manage.py runserver 8080
python manage.py createsuperuser,按提示輸入用戶名、郵箱、密碼
LANGUAGE_CODE = 'zh-Hans' TIME_ZONE = 'Asia/Shanghai'
from django.contrib import admin from models import BookInfo admin.site.register(BookInfo)
class QuestionAdmin(admin.ModelAdmin): ... admin.site.register(Question, QuestionAdmin)
# list_display:顯示字段,能夠點擊列頭進行排序 list_display = ['pk', 'btitle', 'bpub_date'] # list_filter:過濾字段,過濾框會出如今右側 list_filter = ['btitle'] # search_fields:搜索字段,搜索框會出如今上側 search_fields = ['btitle'] # list_per_page:分頁,分頁框會出如今下側 list_per_page = 10 # 添加、修改頁屬性 # fields:屬性的前後順序 fields = ['bpub_date', 'btitle'] # fieldsets:屬性分組 fieldsets = [ ('basic',{'fields': ['btitle']}), ('more', {'fields': ['bpub_date']}), ]
# 接下來實現關聯註冊 from django.contrib import admin from models import BookInfo,HeroInfo class HeroInfoInline(admin.StackedInline): model = HeroInfo extra = 2 class BookInfoAdmin(admin.ModelAdmin): inlines = [HeroInfoInline] admin.site.register(BookInfo, BookInfoAdmin) # 能夠將內嵌的方式改成表格 class HeroInfoInline(admin.TabularInline) # 布爾值的顯示 # 發佈性別的顯示不是一個直觀的結果,能夠使用方法進行封裝 def gender(self): if self.hgender: return '男' else: return '女' gender.short_description = '性別' # 在admin註冊中使用gender代替hgender class HeroInfoAdmin(admin.ModelAdmin): list_display = ['id', 'hname', 'gender', 'hcontent']
#coding:utf-8 from django.http import HttpResponse def index(request): return HttpResponse("index") def detail(request,id): return HttpResponse("detail %s" % id)
# 在test1/urls.py插入booktest,使主urlconf鏈接到booktest.urls模塊 url(r'^', include('booktest.urls')), # 在booktest中的urls.py中添加urlconf from django.conf.urls import url from . import views urlpatterns = [ url(r'^$', views.index), url(r'^([0-9]+)/$', views.detail), ]
'DIRS': [os.path.join(BASE_DIR, 'templates')],
{{輸出值,能夠是變量,也能夠是對象.屬性}}
{%執行代碼段%}
<!DOCTYPE html> <html> <head> <title>首頁</title> </head> <body> <h1>圖書列表</h1> <ul> {%for book in booklist%} <li> <a href="{{book.id}}"> {{book.btitle}} </a> </li> {%endfor%} </ul> </body> </html>
<!DOCTYPE html> <html> <head> <title>詳細頁</title> </head> <body> <h1>{{book.btitle}}</h1> <ul> {%for hero in book.heroinfo_set.all%} <li>{{hero.hname}}---{{hero.hcontent}}</li> {%endfor%} </ul> </body> </html>
from django.http import HttpResponse from django.template import RequestContext, loader from models import BookInfo def index(request): booklist = BookInfo.objects.all() template = loader.get_template('booktest/index.html') context = RequestContext(request, {'booklist': booklist}) return HttpResponse(template.render(context)) def detail(reqeust, id): book = BookInfo.objects.get(pk=id) template = loader.get_template('booktest/detail.html') context = RequestContext(reqeust, {'book': book}) return HttpResponse(template.render(context))
# 在index.html模板中,超連接是硬編碼的,此時的請求地址爲「127.0.0.1/1/」 <a href="{{book.id}}">
# 看以下狀況:將urlconf中詳細頁改成以下,連接就找不到了 url(r'^book/([0-9]+)/$', views.detail),
#此時的請求地址應該爲「127.0.0.1/book/1/」 #問題總結:若是在模板中地址硬編碼,未來urlconf修改後,地址將失效 #解決:使用命名的url設置超連接 #修改test1/urls.py文件,在include中設置namespace url(r'^admin/', include(admin.site.urls)), url(r'^', include('booktest.urls', namespace='booktest')),
# 修改booktest/urls.py文件,設置name url(r'^book/([0-9]+)/$', views.detail, name="detail"),
# 修改index.html模板中的連接 <a href="{%url 'booktest:detail' book.id%}">
from django.shortcuts import render from models import BookInfo def index(reqeust): booklist = BookInfo.objects.all() return render(reqeust, 'booktest/index.html', {'booklist': booklist}) def detail(reqeust, id): book = BookInfo.objects.get(pk=id) return render(reqeust, 'booktest/detail.html', {'book': book})