1、html
1.寫出你所知道Djang有關的全部命令(下載、安裝等)python
1.安裝django pip install django == 1.11.15
2.建立項目 diangoadmin startproject 項目名 3.啓動項目 cd 項目目錄 python manage.py runserver #127.0.0.1:8000 python manage.py runserver 80 python manage.py runserver 0.0.0.0:80
4.建立App python manage.py startapp app01 5.數據庫遷移 python manage.py makemigrations #檢查 models.py是否有變化,記錄變化 app01/migrations python manage.py migrate #將變動記錄同步到數據庫中
2.Django的setting.py中,你用到的配置項有哪些?他們的做用是什麼?mysql
1.INSTALLED_APPS 註冊App 讓Django 程序能夠識別新建的App 2.MIDDLEWARE 中間件 自定義中間件註冊進來能夠執行其中的方法 3.TEMPLATES 模版的相關配置 主要看DIRS 模版的存放路徑 4.DATABASES 數據庫相關配置 告訴Django鏈接什麼數據庫 5.STATIC_URL='/static/' 靜態文件的別名, 模版中已別名開頭 6.STATICFILES_DIRS = [ #靜態文件的具體存放路徑 Django會按照 os.path.join(BASE_DIR,'static') ]
3.Django使用Mysql數據庫的流程是什麼?sql
1.建立一個mysql數據庫 2.settings 中寫配置 DATABASES={ 'defalut':{ 'ENGINE':'django.db.backends.mysql', "NAME":'library', "USER":'root', "HOST":'127.0.0.1', "PORT":3306, } } 3.告訴django使用pymysql的模塊鏈接mysql數據庫 在與settings 同級的目錄下的 __init__.py中寫代碼: import pymysql pymysql.install_as_MySQLdb() 4.在app01/models.py中寫類(繼承models.Model) class Publisher(models.Model): id = models.AutoField(primary_key = True) name = models.CharField(max_length = 32,unique = True) 5.數據庫遷移的命令 python manage.py makemigrations python ,manage.py migrate
4.ORM是什麼?爲何要使用ORM?他的優缺點是什麼?他的對應關係是什麼?數據庫
1.ORM(對象關係映射) 是一種爲了解決面向對象與關係型數據庫不匹配的技術 2.使用ORM不用在過多得關注SQL語句的編寫,而是更加專一於邏輯代碼的編寫 3.優勢: 1.ORM 提供了對數據庫的映射,不用直接編寫SQL代碼, 只需操做對象就能對 數據庫操做數據 2.讓軟件開發人員專一於業務邏輯的處理,提升了開發效率 缺點: 1.ORM 的缺點是會在必定程度上犧牲程序的執行效率 2.ORM 的操做是有限的, 也就是ORM定義好的操做是能夠完成的 4.對應關係 類 ----> 數據表 對象-----> 數據行 屬性 -----> 字段
5.定義視圖函數的時候要注意什麼?django
1.函數的第一個參數是request 2.函數必須返回一個HttpRespo nse對象
6.FBV和CBV是什麼? 定義一個簡單的CBV.瀏覽器
FBV:函數 CBV:類 CBV版: class AddClass(View): def get(self,request): return render(request,"add_class.html") def post(self,request): class_name = request.POST.get("class_name") models.Classes.objects.create(name = class_name) return redirect("/class_list/")
7.CBV使用裝飾器的方法有哪些,分別是什麼?寫出簡單示例.安全
1.導入方法裝飾器 from django.utils.decorators import method_decorator 2.方法: 1.給方法上加裝飾器 @method_decorator(wraper) def get(self,request,*args,**kwargs) return HttpResponse("ok") 2.給dispatch 上加 @method_decorator(wraper) def dispatch(self,request,*args,**kwargs): 3.給類上加 @method_decorator(wraper,name = 'get') class Simple(View)
8.寫出你所知道的request對象的方法和屬性服務器
1.屬性: request.method --->請求的方式8種 GET POST PUT DELETE OPTIONS request.GET ----> 字典 url上攜帶的參數 request.POST ----->字典 form 表單經過POST請求提交的數據 request.path_info ----->URL 路徑 不帶參數 request.body ----->請求體 request.FILES 上傳的文件{} 2.方法: request.get_host() ----->主機地址 request.get_full_path() ----->URL 路徑 帶參數
9.給視圖傳參數的方式有哪幾種?分別是什麼,寫出示例.cookie
1 分組: url(r'book/([0-9]){4}/([0-9]{2})/$',book,) 按照位置參數傳遞給視圖函數 2.命名分組 url(r"book/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$",book,) 按照關鍵字參數傳遞給視圖函數 3.參數 url(r"book/(?P<year>[0-9]{4})/(?P<month>[0-9])/$",book,{'year':'1998'})
10.如何在URLconf中給url命名?在視圖和模版中如何使用url反向解析?請寫出全部狀況
urls.py: url(r'^author_list/$',views.author_list,name = 'author_list'), url(r'^home/([0-9]{4})/([0-9]{2})/',views.home,name = 'home'), url(r'^home/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/',views.home,name = 'home'), 視圖中反向解析: from django.urls import reverse reverse("author_list") -----> '/author_list/' 無名分組: reverse('home',args=('1999','06')) ---->'/home/1999/06/' 有名分組: reverse('home',kwargs = {'year':'1998','month':'06'}) ---->'/home/1998/06/' 模板中反向解析: {% url 'author_list' %} ---->'/author_list/' 無名分組: {% url 'home' '2000' '09' %} 有名分組: {% url 'home' '2000' '09' %} {% url 'home' month = '09' year = '1898' %}
11.請寫出你所知道的模板語法
1.變量 {{ 變量名 }} 2. .的用法 {{ name_list.0 }} #列表取值 {{ name_dict.name1 }} #字典取值 {{ p1.name }} #對象的屬性 {{ p1.sing }} # 對象的方法 3. 過濾器 {{ 變量名|filter:參數 }} 4.tags {% for user in user_list %} {{ user.name }} {% endfor %} {% if 條件 %} 操做 {% endif %}
12.請寫出母版和繼承的使用方法
1. 建立一個 HTML 文件當作母版 'base.html' ,母版中將多個頁面的重複代碼提取出來 2. 在母版中定義多個block ,來區分不一樣頁面的不一樣內容 3.在子頁面中繼承母版 {% extends 'base.html' %} 4.在block 中寫本身頁面獨特的內容,用來替換模板中block中的內容
13.請寫出自定義filter的步驟
1.在app下建立一個名叫 templatetags 的python包 templatetags不能寫錯 2.在templatetags 裏建一個 py文件 myfilters 3.在py文件中編輯: from django import template register = template.Library() # register 名字不能錯 @register.filter def add_sb(value,arg): return '{}sb'.format(value) @register.filter(name = 'dsd') def add_sb(value,arg): return '{}sb'.format(value) 4.重啓 5.使用filter {% load myfilters %} {{ name1|dsd:'very' }}
14.cookie 和session 是什麼? 爲何要使用它們?
1.cookie 定義: cookie是服務器讓瀏覽器保存在瀏覽器本地的鍵值對 緣由: http 是無狀態,每次請求之間沒有任何關係,沒法保存狀態. 使用cookie 來保存 一些狀態 2.session 定義: session 是保存在服務器上的鍵值對,依賴於cookie 緣由: cookie 在瀏覽器端 不太安全 cookie 長度受限 session長度不受限
15.Django中操做 cookie 和session 的方法有哪些?
1.cookie 1.設置 cookie rep = redirect("/index/") rep.set_cookie(key,value,max_age = 1000) rep.set_signed_cookie(key,value,max_age = 1000, salt = '') 2.獲取 cookie request.COOKIES['key'] request.COOKIES.get('key') --->推薦的取法 request.get_signed_cookie('key',salt ='') 3.刪除 cookie rep.delete_cookie('key') 2.session 1.設置session request.session['key'] = value request.session.setdefault(key,value) ---->存在就不設置 2.獲取session request.session['key'] request.session.get(key,'') 3.刪除 session request.session.pop(key) ----->刪除某一個鍵值對 del request.session['key'] request.session.delete() -->刪除全部的session 鍵值對 request.session.flush() -->刪除全部的session 鍵值對,刪除了 cookie 4.設置超時時間 request.session.set expiry() 5.清除當前過時的 session request.session.clear_expired()
16.Django的中間件是什麼?請寫出 process_request 和process_response 以及process_view三個方法的執行時間、執行順序和不一樣返回值不一樣的流程
1.process_request(self.request) 執行時間 :請求來 先執行,在視圖以前 執行順序: 按照註冊順序執行 返回值: 返回值是None 正常日後走 返回值是 HttpResponse 對象 後面的不在走, 直接執行當前中間的 process_response方法 2.process_response(self,request,response) 執行時間: 視圖函數以後 執行順序:安裝註冊順序倒序執行 返回值: HttpResponse對象 3.process_view(self,request,view_func,view_args,view_kwargs) 執行時間: 在視圖以前 ,process_request以後 執行順序: 按照註冊順序 順序執行 返回值: None 正常日後走 HttpResponse 對象 後面的中間件 process_view方法、視圖不執行 走全部中間的 process_response方法
2、ORM操做
models.py:
1.查詢
a) 查找三年級的班級對象
models.Classes.objects.filter(c_name__startswith='三年')
b)查找三年二班的全部同窗的名字
models.Classes.objects.get(c_name = '三年二班').student_set.all().values('s_name')
c)查詢每一個班級的名稱和的學生人數
models.Classes.objects.annotate(count = Count('student')).values('c_name','count')
d)查詢年紀最大的老師姓名和年齡
1.models.Teacher.objects.order_by('-age').values('t_name','age').first() 2.models.Teacher.objects.filter(age=models.Teacher.objects.aggregate(max=Max('age'))['max']).values('t_name','age')
e)分別查詢出男女老師的個數
models.Teacher.objects.values('sex').annotate(Count('sex'))
f)查詢名字中有"灰"的學生姓名和成績
models.Student.objects.filter(s_name__contains = '灰').values('s_name','score')
g)查詢成績合格的學生姓名和成績
models.Student.objects.filter(score__gte=60).values('s_name','score')
2.增長
a)新增一個名爲"三年四班"的班級
models.Classes.objects.create(c_name = '三年四班')
b)給三年二班新增一個名爲"小青"的同窗
models.Student.objects.create(s_name = '小青',my_class_id = 2) models.Classes.objects.get(c_name = '三年二班').student_set.create(s_name='小青',score = 99 )
c)新增一個名爲"苑局"的30歲的男老師,他教三年三班
3.修改
a)小紅轉班了,轉到了三年四班
b)給全部的學生的成績都加5分
from django.db.models import F models.Student.objects.update(score = F('score')+5)
3、請畫出Django請求的生命週期.