中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Django相關(guān)知識點回顧
正文共: 9847字 4圖
預(yù)計閱讀時間: 25分鐘
每日分享
Develop success from failures. Discouragement and failure are two of the surest stepping stones to success.
從失敗中獲得成功。 沮喪和失敗是成功的兩個最可靠的墊腳石。
小閆語錄:
有些人因為失敗而一蹶不振,有些人卻憑借失敗積累的經(jīng)驗在后期獲得成功。失敗并不可怕,如果你連面對的勇氣都沒有,那么你真的不配成功。從失敗中汲取教訓(xùn),尋找失敗的原因,為成功做鋪墊。你比別人承受的更多,你最后獲得的成果越豐碩。不要沮喪,不要畏懼,從第三者的角度看自己,你都會瞧不起自己。振作起來,厚積薄發(fā),現(xiàn)在你所有的失敗都是你成功之后,驕傲的談資。
Django相關(guān)知識點回顧
1.web服務(wù)器和web框架
后端的服務(wù)器其實分為兩部分,一部分是web服務(wù)器程序,一部分是web框架程序。兩部分各司其職。我們結(jié)合后端服務(wù)器處理流程進行說明:
1.接收HTTP請求報文,web服務(wù)器進行解析,并調(diào)用框架程序處理請求。
2.web框架程序進行路由分發(fā)(根據(jù)url找到對應(yīng)的處理函數(shù))。
3.調(diào)用web框架程序的處理函數(shù)中進行業(yè)務(wù)的處理。
4.web服務(wù)器組織響應(yīng)報文,返回內(nèi)容給客戶端。
2.項目創(chuàng)建
創(chuàng)建項目:
django-admin startproject 項目名
創(chuàng)建子應(yīng)用:
python manage.py startapp 子應(yīng)用
子應(yīng)用首先到settings配置文件INSTALLED_APPS中進行注冊。
2.1HelloWorld程序
2.1.1視圖函數(shù)的定義
注意點:函數(shù)設(shè)置形參request接收請求對象;返回相應(yīng)對象HttpResponse。
# /index
def index(request):
...
return HttpResponse('hello world')
2.1.2url地址配置
1.先在子應(yīng)用中創(chuàng)建urls.py文件,設(shè)置當(dāng)前子應(yīng)用中url地址和視圖的對應(yīng)關(guān)系。
from django.conf.urls import url
from users import views
urlpatterns = [
# url('url正則表達式','對應(yīng)視圖函數(shù)')
url(r'^index/$', views.index),
]
2.在項目中總的urls.py文件中對子應(yīng)用的urls文件進行包含。
urlpatterns = [
...
url(r'^', include('users.urls'))
]
在訪問后端接口的時候,會先到總的urls文件中進行匹配子應(yīng)用,匹配到后再到子應(yīng)用中的urls文件中進行視圖的匹配,匹配到后,返回響應(yīng)。
4.djano框架特點
1.Django框架強調(diào)快速開發(fā)和DRY原則。
DRY=DoNotRepeatYourself不要重復(fù)的你自己做過的事情
2.Django是重量級框架,相對于Flask來說,很多功能組件不需要自己再進行安裝。
2.1提供了項目工程管理自動化腳本工具(對應(yīng)Flask中的flask-script),也就是我們可以啟動服務(wù)器的時候通過命令行的方式進行傳參。
2.2數(shù)據(jù)庫ORM支持(對應(yīng)Flask中的FlaskSQLAlchemy)
ORM是對象關(guān)系映射,就是將數(shù)據(jù)庫的操作都轉(zhuǎn)化成對類,屬性和方法的操作,不用寫sql語句了,不用關(guān)注你使用的是mysql還是Oracle等。
3.MVT模式(Model模型、View視圖、Template模板)
5.URL配置
Django默認(rèn)url配置風(fēng)格是在末尾加 /,在子應(yīng)用中進行url地址配置的時候,建議嚴(yán)格匹配開頭和結(jié)尾。
反解析使用
reverse('namespace:name')
name是在子應(yīng)用進行url配置時指定配置項的name
namespace是在項目總的urls中進行包含時指定的namespace
6.項目配置項
6.1BASE_DIR
BASE_DIR是Django項目根目錄。
6.2語言時區(qū)本地化
LANGUAGE_CODE = 'zh-Hans' # 中文語言,也可以是'zh-hans'
TIME_ZONE = 'Asia/Shanghai' # 中國時間
6.3靜態(tài)文件
STATICFILES_DIRS --> 設(shè)置靜態(tài)文件存放的目錄
STATIC_URL --> 設(shè)置訪問靜態(tài)文件的url地址的前綴
django框架僅僅在DEBUG=True的模式下提供靜態(tài)文件
7.客戶端向服務(wù)器傳遞參數(shù)的途徑
7.1通過url地址傳遞參數(shù)
url(r'^weather/(?P<city>\w+)/(?P<year>\d{4})/$', views.weather),
7.2通過查詢字符串傳遞參數(shù)
# 演示從查詢字符串中提取參數(shù)
# /query/?a=1&b=2&c=3&c=4
# flask: request.args
# django: reequest.GET -> QueryDict類的對象,類似于字典,和字典區(qū)別:允許一鍵多值
def query_data(request):
a = request.GET.get('a')
b = request.GET.get('b')
c = request.GET.get('c')
c_list = request.GET.getlist('c')
return HttpResponse('OK')
查詢字符串不區(qū)分請求方式(get或者post請求方式都可以帶查詢字符串),即假使客戶端進行POST方式請求,依然可以通過request.GET獲取請求中的查詢字符串?dāng)?shù)據(jù)。
7.3通過請求體傳遞數(shù)據(jù)
post表單提交,json數(shù)據(jù),文件等等。
7.3.1post表單提交數(shù)據(jù)
# 演示獲取post表單提交數(shù)據(jù)
# /form/
# flask: request.form
# django: requst.POST -> QueryDict類的對象,類似于字典,和字典的區(qū)別允許一鍵多值
def form_data(request):
name = request.POST.get('name')
age = request.POST.get('age')
return HttpResponse('OK')
7.3.2json數(shù)據(jù)
# 演示獲取json數(shù)據(jù)
# /json/
# flask: request.json
def json_data(request):
req_data = request.body # 獲取請求體中原始數(shù)據(jù)bytes
# 將bytes轉(zhuǎn)換為str
json_str = req_data.decode()
# 將json字符串轉(zhuǎn)換為python字典
req_dict = json.loads(json_str)
name = req_dict.get('name')
age = req_dict.get('age')
return HttpResponse('OK')
7.4通過請求頭傳遞數(shù)據(jù)
request.META
7.5request對象的屬性
Flask中request請求對象的屬性Django中request請求對象的屬性說明
argsGET查詢字符串參數(shù)
formPOST請求體中的表單數(shù)據(jù)
databody請求體中的原始bytes數(shù)據(jù)
methodmethod請求方式
pathpath請求的url地址(不含域名)
headersMETA請求頭
cookiesCOOKIES客戶端發(fā)送的cookie信息
filesFILES客戶端上傳的文件
8.響應(yīng)對象構(gòu)造
8.1返回HttpResponse類的對象或其子類的對象
response = HttpResponse('<響應(yīng)體>', content_type='<響應(yīng)數(shù)據(jù)類型>',  status='<響應(yīng)狀態(tài)碼>')
response['<key>'] = '<value>' # 設(shè)置響應(yīng)頭
8.2響應(yīng)時返回json數(shù)據(jù)
# 演示響應(yīng)時返回json數(shù)據(jù)
# /get_json/
# flask: jsonify
# Django: JsonResponse(<dict>)
def get_json(request):
res_dict = {
'name':'xiaohong',
'age':18
}
return JsonResponse(res_dict)
8.3響應(yīng)時進行頁面的重定向
# 演示響應(yīng)時進行頁面重定向
# /redirect_test/
# flask: redirect('重定向的url地址')
# django: redirect('重定向的url地址')
def redirect_test(request):
# 重定向到首頁
req_url = reverse('users:index')
return redirect(req_url)
9.狀態(tài)保持COOKIE和SESSION
9.1cookie
9.1.1特點
1.cookie數(shù)據(jù)保存在客戶端,以key-value存儲。
2.cookie有過期時間,默認(rèn)是關(guān)閉瀏覽器過期。
3.cookie是基于域名安全的,瀏覽器在訪問一個服務(wù)器的時候,只會把跟這個服務(wù)器相關(guān)的cookie發(fā)送過去。
9.1.2設(shè)置
flask:
response = make_response('響應(yīng)內(nèi)容')
response.set_cookie('<key>','<value>',max_age='<過期時間:s>')
django:
response = HttpResponse('響應(yīng)內(nèi)容')
response.set_cookie('<key>','<value>',max_age='<過期時間:s>')
9.1.3獲取
flask:
request.cookies.get('<key>')
django:
request.COOKIES.get('<key>')
9.1.4刪除
flask和django中操作一樣。
response.delete_cookie('<key>')
9.2session
9.2.1特點
1.session數(shù)據(jù)保存在服務(wù)器,以key-value方式存儲。
2.session依賴于cookie,每個客戶端的session信息標(biāo)識保存在客戶端的cookie中。
3.session也有過期時間,flask開啟session過期時間之后默認(rèn)30天,Django中的session過期時間默認(rèn)2周。
9.2.2設(shè)置
flask:
from flask import session
session['<key>'] = '<value>'
django:
request.session['<key>'] = '<value>'
9.2.3獲取
flask:
session.get('<get>')
django:
request.session.get('<key>')
9.2.4Django中session
1.關(guān)系數(shù)據(jù)庫(默認(rèn)存儲方式:django_session)
SESSION_ENGINE='django.contrib.sessions.backends.db'
2.緩存(Django框架緩存默認(rèn)是服務(wù)器內(nèi)存)
SESSION_ENGINE='django.contrib.sessions.backends.cache'
3.混合存儲
SESSION_ENGINE='django.contrib.sessions.backends.cached_db'
4.將session信息存儲到redis中
需要安裝擴展:
pip install django-redis
然后再配置中進行設(shè)置
# 設(shè)置Django框架的緩存位置(如果不做設(shè)置,緩存默認(rèn)是服務(wù)器內(nèi)存)
# 此處是要把Django框架的緩存改為redis
CACHES = {
'default': {
'BACKEND': 'django_redis.cache.RedisCache',
# redis數(shù)據(jù)庫地址設(shè)置
'LOCATION': 'redis://127.0.0.1:6379/1',
'OPTIONS': {
'CLIENT_CLASS': 'django_redis.client.DefaultClient',
}
}
}
# 設(shè)置將django框架的session存儲到緩存中,上面已經(jīng)把django的緩存改為了redis,所以session就存儲到了redis中
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
# 設(shè)置session存儲到緩存空間的名稱
SESSION_CACHE_ALIAS = 'default'
以上內(nèi)容詳細介紹請看文章『我是個鏈接
10.類視圖
10.1使用
10.1.1定義類視圖
# /register/
class RegisterView(View):
'''第一個類視圖'''
def get(self, request):
return HttpResponse('返回注冊頁面')
def post(self, request):
return HttpResponse('進行注冊處理')
def put(self, request):
return HttpResponse('put方法被調(diào)用')
10.1.2進行url配置
urlpatterns = [
url(r'^register/$', views.RegisterView.as_view()),
]
10.2添加裝飾器
1.直接在url配置時手動調(diào)用裝飾器函數(shù)來實現(xiàn)裝飾器添加
urlpattern = [
url(r'^demo/$', my_cecorate(DemoView.as_view()))
]
2.使用Django框架提供的method_decorator,將針對函數(shù)視圖裝飾器,添加到類視圖的方法上面。
# 為全部請求方法添加裝飾器
@method_decorator(my_decorator,name='dispatch')
class DemoView(View):
...
# 為特定的請求方法添加裝飾器
@method_decorator(my_decorator,name='get')
class DemoView(View):
def get(self, request):
...
...
11.中間件
中間件是全局的
11.1定義中間件
def simple_middleware(get_response):
# 此處編寫的代碼僅在Django第一次配置和初始化的時候執(zhí)行一次。
def middleware(request):
# 此處編寫的代碼會在每個請求處理視圖前被調(diào)用。
response = get_response(request)
# 此處編寫的代碼會在每個請求處理視圖之后被調(diào)用。
return response
return middleware
11.2配置文件
在 MIDDLEWARE中注冊中間件
11.3多個中間件代碼執(zhí)行順序
init部分代碼和中間件的注冊順序相反;
before_request部分代碼和中間件的注冊順序相同
after_request部分代碼和中間件的注冊順序相反
以上內(nèi)容詳細介紹請看文章『我是個鏈接
12.模板
12.1作用
渲染產(chǎn)生html頁面內(nèi)容,進行數(shù)據(jù)展示
12.2使用
flask:
render_template('模板文件名',<key>=<value>,...)
django:
1.設(shè)置模板目錄:
TEMPLATES = [
{
...
'DIRS': [os.path.join(BASE_DIR, 'templates')],  # 此處修改
...
},
]
2.使用:
render(requeest,'模板文件名',<字典>)
實例:
# /use_template/
class TemplateView(View):
def get(self, request):
# 使用模板
return render(request, 'temp.html', {'content':'hello'})
12.3使用模板詳細步驟
1.加載模板:指定使用模板文件,獲取模板對象。
from django.template import loader
temp = loader.get_template('模板文件名')
2.模板渲染:給模板文件傳遞變量,將模板文件中的變量進行替換,獲取替換之后的html內(nèi)容。
res_html = temp.render(字典)
3.創(chuàng)建相應(yīng)對象。
return HttpResponse(res_html)
13.數(shù)據(jù)庫
13.1ORM框架
作用:將模型類和數(shù)據(jù)表進行對應(yīng),通過面向?qū)ο蟮姆绞竭M行數(shù)據(jù)庫的操作。
flask:SQLAlchemy
django:自帶ORM框架,可以直接進行使用
13.2Django和Flask模板區(qū)別
13.2.1模板變量
{{ 模板變量 }}
a) Django使用模板變量時,無論是字典、列表或者元組的元素,都需要使用 .取值,下標(biāo)或者鍵名,不能使用 [],這是和Flask有區(qū)別的地方。
b) Django中的模板變量不能直接進行算術(shù)運算。
13.2.2模板控制語句
13.2.2.1條件判斷
a) Django模板在進行條件判斷時,比較操作符兩邊必須有空格。
13.2.2.2for循環(huán)
b) Django模板中的for循環(huán)和jinja2模板中for循環(huán)對比。
# Jinja2模板中for循環(huán)
{% for ... in ... %}
# 遍歷不為空時的邏輯
# 獲取for循環(huán)遍歷到了第幾次
{{ loop.index }}
{% else %}
# 遍歷為空時的邏輯
{% endfor %}
# Django模板中for循環(huán)
{% for ... in ... %}
# 遍歷不為空時的邏輯
# 獲取for循環(huán)遍歷到了第幾次
{{ forloop.couter }}
{% empty %}
# 遍歷為空時的邏輯
{% endfor %}
13.2.3模板過濾器
a) Jinja2模板過濾器使用
{{ 模板變量|過濾器(參數(shù)...)}}
b) Django中模板過濾器的使用
{{ 模板變量|過濾器:參數(shù) }}
注意:Django過濾器 :之后只能接收一個參數(shù)
13.3步驟
13.3.1數(shù)據(jù)庫連接配置
flask:
SQLAlCHEMY_DATABASE_URI='mysql://<username>:<password>@<host_ip>:<port>/<db>
django:
1.在settings.py進行配置
# 數(shù)據(jù)庫配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST':'127.0.0.1', #  數(shù)據(jù)庫服務(wù)器IP
'PORT':3306, # 數(shù)據(jù)庫服務(wù)器port
'USER':'root', # 用戶名
'PASSWORD':'mysql', # 密碼
'NAME':'django_demo' # 數(shù)據(jù)庫名
}
}
2.安裝pymysql
pip install pymysql
3.首次啟動時需要在項目同名目錄 __init__.py添加
import pymysql
pymysql.install_as_MySQLdb()
13.3.2定義模型類
flask中定義模型類:
db = SQLAlchemy(app)
class User(db.model):
'''模型類'''
# 字段名 = db.Column(字段類型, 選項參數(shù))
...
__tablename__ = '<表名>'
django中定義模型類:
class 模型類名(models.Model):
# 字段名 = models.字段類型(選項參數(shù))
...
class Meta:
db_table = '<表名>'
定義外鍵屬性:
# 表中外鍵字段名格式: <外鍵屬性_id>
hbook = models.ForeignKey('BookInfo', on_delete=models.CASCADE, verbose_name'圖書')
13.3.3遷移生成數(shù)據(jù)表
flask:
flask-migrate
python manage.py db init# 生成遷移文件夾
python manage.py db migrate # 生成遷移文件
python manage.py db upgrade # 遷移
django:
# 生成遷移文件
python manage.py makemigrations
# 遷移生成表
python manage.py migrate
13.3.4通過模型類和對象進行數(shù)據(jù)庫操作(增刪改查)
新增
創(chuàng)建模型類對象--->對象.save()
注意:添加HeroInfo時,可以給hbook賦值,也可以直接表中hbook_id賦值
或者:
模型類.objects.create(...)
修改
查詢對象->修改對象屬性->對象.save()
或者:
模型類.objects.filter(...).update(...)
刪除
查詢對象->對象.delete()
或者:
模型類.objects.filter(...).delete()
查詢
模型類.objects.查詢函數(shù)
查詢相關(guān)函數(shù):
函數(shù)名稱參數(shù)作用返回值
all無查詢模型類對應(yīng)表格中的所有數(shù)據(jù)QuerySet(查詢集)
get查詢條件查詢滿足條件一條且只能有一條數(shù)據(jù)模型類對象,查不到會報錯DoesNotExist
filter查詢條件返回滿足條件的所有數(shù)據(jù)QuerySet(查詢集)
exclude查詢條件返回不滿足條件的所有數(shù)據(jù)QuerySet(查詢集)
order_by排序字段對查詢結(jié)果進行排序QuerySet(查詢集)
aggregate聚合查詢時進行聚合操作字典:{'屬性名_聚合類小寫':值}
count無返回查詢結(jié)果的數(shù)目數(shù)字
條件查詢:
對應(yīng)get,filter,exclude參數(shù)中可以寫查詢條件
格式:屬性名__條件名 = 值
可以寫多個查詢條件,默認(rèn)是且的關(guān)系
F對象:
用于查詢時字段之間的比較
from django.db.models import F
Q對象:
用于查詢時條件之間的邏輯關(guān)系
from django.db.models import Q
&(與) |(或) ~(非)
聚合類:
聚合類: from django.db.models import Count, Sum, Avg, Max, Min
使用aggregate()過濾器調(diào)用聚合函數(shù)
排序:
排序默認(rèn)是升序,降序在排序字段前加-
使用order_by
關(guān)聯(lián)查詢:
1.查詢和指定對象關(guān)聯(lián)的數(shù)據(jù)
# 由1查多
一對象.多類名小寫_set.all()
例:book.heroinfo_set.all()
# 由多查1
多對象.外鍵屬性
例:hero.hbook
2.通過模型類進行關(guān)聯(lián)查詢
# 查圖書(一)
一類.objects.get|filter(多類名__字段__條件=值)
例:books = BookInfo.objects.filter(heroinfo__hcomment__contains='八')
# 查英雄(多)
多類.objects.filter(外鍵屬性__字段__條件=值)
例:heros = HeroInfo.objects.filter(hbook__bread__gt=30)
13.4QuerySet(查詢集)
all,filter,exclude,order_by這4個函數(shù)返回的是查詢集對象
特點
可以像list一樣進行操作,可以遍歷、取下標(biāo)、進行切片,切片時下標(biāo)不允許為負(fù)數(shù)。
注意:對于QuerySet類的對象,可以繼續(xù)調(diào)用之前所講任何一個查詢函數(shù)。
例:查詢id大于3的圖書數(shù)量
BookInfo.objects.filter(id__gt=3).count()
exists:判斷查詢集中是否有數(shù)據(jù)
兩大特性
惰性查詢:
只有在使用查詢集中的數(shù)據(jù)時才會進行數(shù)據(jù)庫真正查詢操作。
查詢結(jié)果的緩存
使用同一個查詢集時,只有在第一次使用查詢集時會進行數(shù)據(jù)庫的查詢操作,然后Django框架就會把查詢的結(jié)果存起來,下一次再使用這個查詢集時,使用的Django之前存儲的結(jié)果。
以上內(nèi)容詳細介紹請看文章『我是個鏈接
14.Admin站點
Django自帶文件存儲系統(tǒng),可以直接通過Admin站點進行圖片的上傳,默認(rèn)上傳的文件保存在服務(wù)器本地。
使用
1.在配置文件中設(shè)置配置項MEDIA_ROOT='上傳文件的保存目錄'
2.定義模型類時,圖片字段的類型使用 ImageField
3.遷移生成表并在admin.py注冊模型類,直接登錄Admin站點就可以進行圖片上傳
以上內(nèi)容詳細介紹請看文章『我是個鏈接
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
微信小程序與django
django框架的處理機制
Flask 使用小結(jié)
學(xué)習(xí)筆記八 接口開發(fā),上傳下載,日志
【Django】 初步學(xué)習(xí)
Flask是Python web最火熱三大框架之一!給我兩小時帶你完全入門
更多類似文章 >>
生活服務(wù)
熱點新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服