面試題—Django框架部分


Django框架面試題

1.基礎部分

1.Django的生命周期是怎樣的過程?

解析:

客戶端發送請求,經由django的wsgi模塊,調用socket創建服務端並發接受客戶端的請求,請求經過正向依次經過中間件中的process_reqeust方法處理。

處理完后,經過Django中的url分發,調用對應的視圖函數,視圖函數根據具體的請求業務邏輯,通過orm模型操作數據庫獲取數據,在通過模板系統渲染html文件,最后返回一個HttpResponse對象。

HttpResponse對象反向依次經過中間件中的process_response方法處理,最終經由wsgi的socket服務端返回給客戶端。

2.寫出你所知道Djang有關的所有命令(下載、安裝等)

1.安裝django 
pip install django == 1.11.15 

2.創建項目 
diango­admin 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         #將變更記錄同步到數據庫中

 3.Django的setting.py中,你用到的配置項有哪些?他們的作用是什么?

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')
]

4.Django使用Mysql數據庫的流程是什么?

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

5.ORM是什么?為什么要使用ORM?他的優缺點是什么?他的對應關系是什么?

1.ORM(對象關系映射) 是一種為了解決面向對象與關系型數據庫不匹配的技術

2.使用ORM不用在過多得關注SQL語句的編寫,而是更加專注於邏輯代碼的編寫

3.優點:

  • ORM 提供了對數據庫的映射,不用直接編寫SQL代碼, 只需操作對象就能對數據庫操作數據 
  • 讓軟件開發人員專注於業務邏輯的處理,提高了開發效率

缺點:

  • ORM 的缺點是會在一定程度上犧牲程序的執行效率
  • ORM 的操作是有限的, 也就是ORM定義好的操作是可以完成的

4.對應關系

  • 類 ----> 數據表
  • 對象-----> 數據行
  • 屬性 -----> 字段

6.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)

7.cookie 和session 是什么? 為什么要使用它們?

1.cookie
定義: cookie是服務器讓瀏覽器保存在瀏覽器本地的鍵值對
原因: http 是無狀態,每次請求之間沒有任何關系,無法保存狀態. 使用cookie 來保存
一些狀態
2.session
定義: session 是保存在服務器上的鍵值對,依賴於cookie
原因:
cookie 在瀏覽器端  不太安全
cookie 長度受限   session長度不受限

8.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方法

9.請寫出自定義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' }}

10.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()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM