前一篇講了建立一個工程和一個polls的應用程序,以及配置了數據庫。css
這篇就繼續講吧html
admin模塊是django自帶的模塊,他讓開發者能夠不用管寫任何代碼的狀況下就擁有了網站後臺管理功能。不過有打開過界面的同窗應該注意到,不知道帳號密碼,也沒法進去一探究竟python
咱們能夠先用這個命令來建立網站超級管理員web
python manage.py createsuperuser數據庫
而後就會讓你按照指令輸入用戶用,email和兩次密碼,以後會說成功建立,而後在數據庫的auth_user表中能清楚的看到這個帳號被添加在這裏,密碼呈現亂碼,應該是被修改過了django
· 接着去啓動這個服務,用python manage.py runserver打開web服務,瀏覽器
在瀏覽器裏打開http://127.0.0.1:8000/admin/,輸入剛剛建立的帳號和密碼,而後應該會出現這樣的畫面函數
這些代碼徹底不用你動手就能本身建立好,是否是很便利呢。並且相較於django1.11,django2.0作好了適應各類瀏覽器的自適應,應該是在css中添加了min-width的代碼吧,不過在手機上也能自適應哦網站
咱們如今雖然已經有了管理員帳號,和後天管理系統。可是後臺系統仍是沒法對基本數據進行修改,也沒有發佈問卷的功能,接下來就作這些吧url
打開polls/admin.py文件,添加一下代碼
from django.contrib import admin from .models import Question admin.site.register(Question)
而後去刷新一下網頁,我用的是pycharm,就會發現多了些東西
那個polls原本是沒有的,如今多了,而後點擊增長,進入如下界面,
上面那些數據是我本身填上去的,保存完以後會跳轉到這裏
而後還能夠對他進行各式各樣的操做。
通過上面這些操做,能夠看到django幫咱們作完了不少事,
自動生成網頁表單
根據數據字段樂行自動生成HTML空間
數據增刪改查功能
部分文本的本地化顯示(中文顯示)
如今後臺頁面已經完成了,就差一個前臺了,首先,咱們須要這樣四個頁面
1。首頁,展現最新的調查問卷
2。詳細頁面,具體的問卷展現頁,能夠投票
3。結果展現頁,展現某問卷的結果
4。投票頁面,處理某一次的投票
在django中每個頁面或者其餘內容都是經過視圖呈現出來的,每個視圖就是一python函數和方法。django經過url肯定調用的視圖,django的url相對於早期網站的url更加的簡潔優雅
django經過URLconfs講url模式的字符串與視圖關聯起來,URL模式字符串就是一個url的一半形式,如/newsarchive/<year>/<month>/
閒話少說,如今polls/view.py文件內添加一下視圖
def detail(request,question_id): return HttpResponse("正在爲您打開問卷 %s。" % question_id) def results(request,question_id): response = "正在查看問卷 %s 的結果" return HttpResponse(response % question_id) def vote(request,question_id): return HttpResponse("請爲問卷 %s 提交您的答案。" % question_id)
修改polls.urls文件,添加如下URL映射
urlpatterns = [ # ex:/polls/ path('',views.index,name='index'), # ex:/polls/5/ path('<int:question_id>',views.detail, name='detail'), # ex:/polls/5/results/ path('<int:question_id>/results',views.results, name='results'), # ex:/polls/5/vote path('<int:question_id>/vote',views.vote, name='vote'), ]
重啓web服務,注意,必定要重啓,
而後輸入http://127.0.0.1:8000/polls/3這個域名,會看到以下的頁面
輸入其餘相似的域名會跳轉到如下頁面
這都是由於剛剛在url中配置了緣故
每個視圖都應該負責一個具體的業務邏輯,視圖執行結束會返回一個包含頁面內容的HttpResponse對象或者異常信息。
接下來修改index視圖使他返回最新的五條調查問卷,在polls/views下修改代碼
from .models import Question def index(request): latest_question_list = Question.objects.order_by('-pub_date')[:5] output = ','.join([q.question_text for q in latest_question_list]) return HttpResponse(output)
而後返回127.0.0.1:8000/polls/這個頁面,會看到,返回值變了
如上圖能夠看到我有兩個問卷,返回值就是這兩個,同理,有多個就會返回最近的五個
東西是顯示出來了,可是樣式有點醜,也無法改。想要增長要是的話只能在html文件裏改。django是mtv的模式,咱們只須要一個模板就行了。先去polls文件下建立一個新的文件下templats,在了目錄清晰,在該文件夾下建立一個polls文件夾,接下來能夠把html文件放裏面了。咱們先在這裏建立一個index.html文件。
文件目錄以下(貼一個總目錄能夠看看有沒有什麼區別)
在index.html文件裏寫入如下代碼
{% if latest_question_list %} <ul> {% for question in latest_question_list %} <li><a href="/polls/{{question.id}}/">{{question.question_text }}</a> </li> {% endfor %} </ul> {% else %} <p>尚未調查問卷!</p> {% endif %}
接着去修改polls/views中的index視圖(爲了以防萬一我把四個導包的也引入進來,這裏本來應該添加一個)
from django.shortcuts import render from django.http import HttpResponse from .models import Question from django.template import loader def index(request): latest_question_list = Question.objects.order_by('-pub_date')[:5] tempalte = loader.get_template('polls/index.html') context = { 'latest_question_list': latest_question_list, } return HttpResponse(tempalte.render(context,request))
而後從新啓動服務,刷新網頁去看看,就會變成下圖這樣
這篇就先講到這,這個怎麼實現的留在下一篇再說,休息會。。。。