python 大雜燴~~~

一、python 基礎(chǔ)入門篇

1.python下載與安裝
下載略。
pycharm 2019.3.2pj,https://www.cnblogs.com/fxzz/p/12016671.html

安裝版本3.8,如下:

自定義安裝

不用管直接next

image.png

安裝成功

image.png

安裝python的同時(shí)會(huì)幫我們裝idle,可以進(jìn)行補(bǔ)全碉熄、代碼保存等操作箱季。


idle

輸入exit() 退出交互頁面玄柏。python擴(kuò)展名.py兼呵。

2.python基礎(chǔ)用法

字符串太長(zhǎng)畸写,可以用“\”代表換行驮瞧。在python中不要隨便縮進(jìn)。標(biāo)識(shí)符遵循兩種命名規(guī)范枯芬,一:大駝峰YangMi,二:下劃線小寫字母 yang_mi

在python中數(shù)值分整數(shù)论笔、小數(shù)、復(fù)數(shù)三種破停。如果數(shù)字長(zhǎng)度很大翅楼,可以使用下劃線作分隔符。

# 注釋
print('') # 單行注釋
print(r'C:\some\name') # 用r正常輸出r真慢,r代表可以輸出原始字符串
print("""\
第一行
     縮進(jìn)的第二行
     縮進(jìn)的第三行
""")# \代表忽略換行毅臊,不加會(huì)幫我們換行

print(2 * '冪' + 'wq') # 冪冪wq


word = 'Python'
print(word[0]) # 輸出P
print(word[-0]) # 輸出P
print(word[0:5]) # 輸出Pytho
print(word[0:6]) # 輸出Python
print(word[0:100]) # 輸出Python
print(word[-6]) # 輸出P

print(2**4) # 輸出2的4次方等于16 
print(123_4567_890) # 1234567890 下劃線作分隔符

s = 'wuqing'
print(len(s)) # 6

# if
x = int(input("Please enter an integer: "))
# Please enter an integer: 42
if x < 0:
    x = 0
    print('Negative changed to zero')
elif x == 0:
    print('Zero')
elif x == 1:
    print('Single')
else:
    print('More')


# 輸出:
# 慶 1
# 冪冪 2
words = ['慶', '冪冪']
for w in words:
      print(w, len(w))

words = ['cat', 'window', 'defenestrate']
for w in words[:]:  # Loop over a slice copy of the entire list. 如果寫成 for w in words:,這個(gè)示例就會(huì)創(chuàng)建無限長(zhǎng)的列表黑界,一次又一次重復(fù)地插入 defenestrate管嬉。
     if len(w) > 6:
        words.insert(1, w)
        # words.remove(w)
print(words)

for i in range(0,10,4):
      print(i, end=' ')  # 實(shí)現(xiàn)輸出不換行

print(list(range(0,10,4))) # [0, 4, 8]

  • 文件操作


    文件打開與關(guān)閉

    對(duì)文件不存在,拋出異常信息進(jìn)行異常處理


    捕獲文件不存在異常
  • 文件的簡(jiǎn)單讀取


    文件簡(jiǎn)單讀取
  • 讀取大文件


    while循環(huán)讀取大文件
  • 通過readline朗鸠、readlines讀取文件
readline蚯撩、readlines讀取
  • 文件寫入
文件寫入
  • 二進(jìn)制文件
file_name = 'c:/Users/ym/Desktop/愛的供養(yǎng).flac'

# 讀取模式
# t 讀取文本文件(默認(rèn)值)
# b 讀取二進(jìn)制文件

with open(file_name , 'rb') as file_obj:
    # 讀取文本文件時(shí),size是以字符為單位的
    # 讀取二進(jìn)制文件時(shí)烛占,size是以字節(jié)為單位
    # print(file_obj.read(100))

    # 將讀取到的內(nèi)容寫出來
    # 定義一個(gè)新的文件
    new_name = 'aa.flac'

    with open(new_name , 'wb') as new_obj:

        # 定義每次讀取的大小
        chunk = 1024 * 100

        while True :
            # 從已有的對(duì)象中讀取數(shù)據(jù)
            content = file_obj.read(chunk)

            # 內(nèi)容讀取完畢胎挎,終止循環(huán)
            if not content :
                break

            # 將讀取到的數(shù)據(jù)寫入到新對(duì)象中
            new_obj.write(content)
  • 讀取文件的位置
    英文的話一個(gè)字節(jié)也是一個(gè)字符沟启,中文三個(gè)字節(jié)一個(gè)字符 。
# with open('demo.txt','rb') as file_obj:
#     # print(file_obj.read(100))
#     # print(file_obj.read(30))

#     # seek() 可以修改當(dāng)前讀取的位置
#     file_obj.seek(55)
#     file_obj.seek(80,0)
#     file_obj.seek(70,1)
#     file_obj.seek(-10,2)
#     # seek()需要兩個(gè)參數(shù)
#     #   第一個(gè) 是要切換到的位置
#     #   第二個(gè) 計(jì)算位置方式
#     #       可選值:
#     #           0 從頭計(jì)算犹菇,默認(rèn)值
#     #           1 從當(dāng)前位置計(jì)算
#     #           2 從最后位置開始計(jì)算

#     print(file_obj.read())

#     # tell() 方法用來查看當(dāng)前讀取的位置
#     print('當(dāng)前讀取到了 -->',file_obj.tell())

with open('demo2.txt','rt' , encoding='utf-8') as file_obj:
    # print(file_obj.read(100))
    # print(file_obj.read(30))

    # seek() 可以修改當(dāng)前讀取的位置
    file_obj.seek(9)
    # seek()需要兩個(gè)參數(shù)
    #   第一個(gè) 是要切換到的位置
    #   第二個(gè) 計(jì)算位置方式
    #       可選值:
    #           0 從頭計(jì)算德迹,默認(rèn)值
    #           1 從當(dāng)前位置計(jì)算
    #           2 從最后位置開始計(jì)算

    print(file_obj.read())

    # tell() 方法用來查看當(dāng)前讀取的位置
    print('當(dāng)前讀取到了 -->',file_obj.tell())
  • 文件的其他操作
import os
from pprint import pprint

# os.listdir() 獲取指定目錄的目錄結(jié)構(gòu)
# 需要一個(gè)路徑作為參數(shù),會(huì)獲取到該路徑下的目錄結(jié)構(gòu)揭芍,默認(rèn)路徑為 . 當(dāng)前目錄
# 該方法會(huì)返回一個(gè)列表胳搞,目錄中的每一個(gè)文件(夾)的名字都是列表中的一個(gè)元素
r = os.listdir()

# os.getcwd() 獲取當(dāng)前所在的目錄
r = os.getcwd()

# os.chdir() 切換當(dāng)前所在的目錄 作用相當(dāng)于 cd
# os.chdir('c:/')

# r = os.getcwd()

# 創(chuàng)建目錄
# os.mkdir("aaa") # 在當(dāng)前目錄下創(chuàng)建一個(gè)名字為 aaa 的目錄

# 刪除目錄
# os.rmdir('abc')

# open('aa.txt','w')
# 刪除文件
# os.remove('aa.txt')

# os.rename('舊名字','新名字') 可以對(duì)一個(gè)文件進(jìn)行重命名,也可以用來移動(dòng)一個(gè)文件
# os.rename('aa.txt','bb.txt')
os.rename('bb.txt','c:/users/ym/desktop/wq.txt')

pprint(r)

二称杨、django web端開發(fā)

開發(fā)環(huán)境搭建

下載一個(gè)conda包管理工具肌毅。

  • conda的包管理

anaconda為我們提供方便的包管理命令——conda, 下面我們來看看都有哪些有用的命令吧!

配置下國(guó)內(nèi)鏡像

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
# 查看已經(jīng)安裝的packages
conda list
# 查看已經(jīng)安裝的虛擬環(huán)境
conda info --env
# 查看某個(gè)指定環(huán)境的已安裝包
conda list -n python34

# 查找package信息
conda search numpy

# 安裝scipy
conda install scipy

# 安裝package
# 如果不用-n指定環(huán)境名稱姑原,則被安裝在當(dāng)前活躍環(huán)境
conda install -n python34 numpy

# 更新package
conda update -n python34 numpy

# 刪除package
conda remove -n python34 numpy
由于conda將conda悬而、python等都視為package,因此页衙,完全可以使用conda來管理conda和python的版本摊滔,例如

# 更新conda,保持conda最新
conda update conda

# 更新anaconda
conda update anaconda

# 更新python
conda update python
  • 安裝pycharm店乐,略。

配置下新建py文件的模板呻袭,可以添加作者眨八、創(chuàng)建時(shí)間信息等。
配置模板
  • django項(xiàng)目start~~

這一塊的前提是我們首先在安裝python的前提下左电,打開cmd,輸入pip 命令有正常輸出廉侧,則可以進(jìn)行下一步安裝虛擬環(huán)境,虛擬環(huán)境的目的保證我們的python應(yīng)用間的獨(dú)立篓足,像版本升級(jí)啥的不會(huì)影響到其他項(xiàng)目段誊。

  • virtualenv

(1)pip install virtualenv
virtualenv -p 指定python安裝路徑
在linux 下安裝virtualenv,sudu apt-get install python-virtualenv
virtualenv 虛擬環(huán)境名稱,source activate栈拖。這里我們測(cè)試下连舍,
(2)virtualenv testwqenv 創(chuàng)建一個(gè)虛擬環(huán)境
這種不指定路徑默認(rèn)裝在cmd當(dāng)前運(yùn)行目錄的,然后創(chuàng)建完涩哟,可以進(jìn)入到虛擬環(huán)境索赏,通過cd testwqenv,dir列出文件列表,然后再進(jìn)入Scripts目錄贴彼,會(huì)發(fā)現(xiàn)有個(gè)activate.bat文件直接運(yùn)行該文件。

成功進(jìn)入到我們的虛擬環(huán)境

(3)可通過pip list查看當(dāng)前的虛擬環(huán)境安裝了哪些庫(kù)威鹿。通過deactivate.bat退出虛擬環(huán)境炸渡。
這種虛擬環(huán)境還得需要我們知道安裝的虛擬環(huán)境目錄,這樣比較麻煩,所以接下來介紹另一種方式煤蚌。

  • virtualenvwrapper

(1)pip install virtualenvwrapper-win 革骨,因?yàn)槲覀兪窃趙indows環(huán)境下安裝并村,所以需要添加-win巍实。
(2)mkvirtualenv wqwrapperenv 創(chuàng)建一個(gè)名為wqwrapperenv新的虛擬環(huán)境。安裝完畢后哩牍,它會(huì)自動(dòng)進(jìn)入到我們的虛擬環(huán)境棚潦。如果想通過python3版本來安裝 虛擬環(huán)境,則mkvirtualenv --python=python3的安裝路徑\python.exe [虛擬環(huán)境名稱]膝昆;
(3)deactivate 退出虛擬環(huán)境
(4)workon 查看當(dāng)前有哪些虛擬環(huán)境
workon 是virtualenvwrapper的一個(gè)命令丸边,列出所有的虛擬環(huán)境。
(5)rmvirtualenv 刪除虛擬環(huán)境荚孵,慎用妹窖。
(6)workon wqwrapperenv,進(jìn)入到我們剛新建的wqwrapperenv的虛擬環(huán)境中。
可以在環(huán)境變量里添加一個(gè)WORKON_HOME指定虛擬環(huán)境的目錄处窥,這樣在創(chuàng)建虛擬環(huán)境時(shí)會(huì)自動(dòng)識(shí)別到并創(chuàng)建在指定的目錄下嘱吗。如上是在windows下可以直接通過mkvirtualenv創(chuàng)建一個(gè)虛擬環(huán)境,但是linux下需要配置~/.bashrc修改workon_home等信息

linux下需要配置

然后通過source ~/.bashrc即可生效滔驾。linux下創(chuàng)建python3的虛擬環(huán)境。
linux下創(chuàng)建Python3的虛擬環(huán)境

windows新建虛擬環(huán)境

選擇我們虛擬環(huán)境下的解釋器

在上面虛擬環(huán)境創(chuàng)建完畢后俄讹,我們可以先在虛擬環(huán)境中哆致,pip install django -i https://pypi.doubanio.com/simple,因?yàn)槲覀冃陆ǖ氖莇jango框架的項(xiàng)目患膛。

新建一個(gè)django項(xiàng)目需要指定虛擬環(huán)境

1.新建一個(gè)項(xiàng)目,New Project,這里由于應(yīng)用都有個(gè)用戶模塊摊阀,所以在初始時(shí)新建一個(gè)名叫users的app

開始創(chuàng)建一個(gè)django項(xiàng)目

2.在settings.py中配置mysql數(shù)據(jù)庫(kù),因?yàn)樾枰猰ysql數(shù)據(jù)驅(qū)動(dòng)踪蹬,先pip install mysqlclient胞此。

DATABASES = {
      'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': "gcgs_wechat",
        'USER': 'root',
        'PASSWORD': "123456",
        'HOST': "127.0.0.1"
    }
}

3.在settings.py中修改配置中文顯示以及時(shí)區(qū)相關(guān)配置

#設(shè)置時(shí)區(qū)
LANGUAGE_CODE = 'zh-hans'  #中文支持,django1.8以后支持跃捣;1.8以前是zh-cn
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_L10N = True
USE_TZ = False

4.配置靜態(tài)文件目錄以及媒體文件目錄

STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR,'static') #需要在根目錄下建立一個(gè)static目錄
]
MEDIA_URL = '/static/media/'
MEDIA_ROOT = os.path.join(BASE_DIR,'static/media') #它跟上面不一樣不是列表

##完了以后搜索context_processors上添加media處理器
'django.template.context_processors.media'

4.引入include,配置users相關(guān)路由
5.創(chuàng)建其他app

python manage.py startapp app名稱

5.在settings.py中INSTALLED_APPS中添加剛創(chuàng)建的app
6.在urls.py中配置分發(fā)子路由漱牵。
7.由于創(chuàng)建了多個(gè)app和原有的都混在一個(gè)目錄下,那么接下來我們可以自己創(chuàng)建一個(gè)包進(jìn)行管理疚漆。新建一個(gè)python package命名為apps酣胀。再把我們之前創(chuàng)建的app全部移到新的apps包下刁赦,注意移的時(shí)候兩個(gè)勾全部去掉。再給apps右擊標(biāo)記為sources root闻镶,將我們自己定義的包加入到python的搜尋環(huán)境變量中甚脉。(在setttings.py引入sys(python環(huán)境變量),將apps環(huán)境變量通過sys.path.insert進(jìn)來) 如果有第三方的包我 們可以新建一個(gè)extra_apps存放也需要右擊標(biāo)記為sources root铆农。

配置搜索路徑

8.在models.py中建立模型
9.在settings.py中添加Auth_user_model來替換系統(tǒng)用戶
10.通過python manage.py makemigrations[可以跟app名牺氨,不跟的話就是全部]創(chuàng)建完再python manage.py migrate完成遷移
python manage.py collectstatic
11.導(dǎo)入導(dǎo)出可以通過python manage.py dumpdata > test.json導(dǎo)出數(shù)據(jù),再通過python manage.py loaddata test.json將數(shù)據(jù)導(dǎo)入墩剖。

啟動(dòng)項(xiàng)目

python manage.py runserver

python豆瓣源
將原有應(yīng)用下載的包的版本都導(dǎo)出到一個(gè)文件文件中:
pip freeze > requirements.txt
再在新應(yīng)用中通過pip install -r requirements.txt -i https://pypi.doubanio.com/simple

pip install virtualenv
pip uninstall django
pip install django -i https://pypi.doubanio.com/simple
后面項(xiàng)目起來后猴凹,因?yàn)槲覀兣渲玫氖莔ysql數(shù)據(jù)庫(kù),還需要安裝mysqlclient

在windows安裝包出錯(cuò)的時(shí)候涛碑,可以去此網(wǎng)站找精堕。
https://www.lfd.uci.edu/~gohlke/pythonlibs/

常用的依賴包:

安裝djangorestframework
pip install django -i https://pypi.doubanio.com/simple
pip install markdown
pip install django-filter

安裝過程

mysqlclient
pillow 圖片處理的包

第三方包

DjangoUeditor

migrations原理及表生成

前提是要將我們之前定義的 app放在 settints.py里的INSTALLED_APPS中去。
通過python manage.py makemigrations
再python manage.py migrate
之后 對(duì)表模型修改后都先執(zhí)行上面兩步蒲障,django怎么知道m(xù)igrate哪一步呢歹篓,是因?yàn)樵跀?shù)據(jù)庫(kù)里有張django_migrations表會(huì)記錄已經(jīng)運(yùn)行了哪些文件。如果發(fā)現(xiàn)執(zhí)行不了的時(shí)候揉阎,可以將某塊的記錄刪除 庄撮,這樣它就能重新跑了。盡量使用代碼的方式修改表信息毙籽。

djangoadmin

默認(rèn)它是不會(huì)幫我們創(chuàng)建user的洞斯,我們可以通過createsuperuser來創(chuàng)建。默認(rèn)是用戶名和密碼登錄 的方式坑赡。在settings.py中修改配置中文顯示以及時(shí)區(qū)相關(guān)配置烙如。可以在users的app下修改admin.py注冊(cè)我們的django管理系統(tǒng)毅否。
注冊(cè)管理系統(tǒng)

xadmin

有兩種安裝方式

第一種:通過workon 我們的虛擬環(huán)境 亚铁,然后pip install xadmin,安裝完后在settings.py的installed_apps下將xadmin還有crispy_forms添加進(jìn)來即可。然后在urls.py中進(jìn)行修改螟加,將原來的admin給替換成xadmin.
image.png
并將原來user的app下的admin.py的東西刪掉徘溢。然后再需要makemigrations及migrate將xadmin的表同步進(jìn)來。

第二種是通過源碼安裝的方式:

在github官網(wǎng)搜索xadmin,將它的源碼download下來捆探。
下載xadmin
下載下來以后然爆,將里面的xadmin拷貝到我們的extra_apps中。
安裝完后黍图, 需要將model進(jìn)行注冊(cè)到xadmin中曾雕,在每個(gè)app下新建一個(gè)adminx.py(注這個(gè)名字固定,xadmin會(huì)自動(dòng)搜索到)
注冊(cè)用戶到xadmin中

顯示自定義

自定義顯示字段以及搜索字段雌隅、過濾字段

獨(dú)立使用django的model

獨(dú)立使用django的model

Restful接口

幾大動(dòng)詞

json格式返回

modeltodict方式

serializer序列化model

image.png

image.png

踩坑:

AttributeError: 'AutoSchema' object has no attribute 'get_link'異常處理

REST_FRAMEWORK = {
    'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema',
),
    # 'DEFAULT_THROTTLE_CLASSES': (
    #     'rest_framework.throttling.AnonRateThrottle',
    #     'rest_framework.throttling.UserRateThrottle'
    # ),
    # 'DEFAULT_THROTTLE_RATES': {
    #     'anon': '2/minute',
    #     'user': '3/minute'
    # }
}

ApiView

apiview

ModelSerializer

class SnippetSerializer(serializers.ModelSerializer):
    class Meta:
        model = Snippet
        fields = ['id', 'title', 'code', 'linenos', 'language', 'style']

如果想取出所有字段翻默,(它會(huì)將外鍵序列化它的id)則可以:


取出所有字段

如果我們不想只序列化外鍵id缸沃,則可以將外鍵所在的實(shí)體也定義一個(gè)serializer,然后進(jìn)行嵌套即可修械。


嵌套serializer

GenericAPIView

from rest_framework import mixins
from rest_framework import generics
繼承mixins.ListModelMixin, generics.GenericAPIView
如果 在里面不 寫get請(qǐng)求 它是以為 你這方法 是不被允許get的趾牧,會(huì)提示錯(cuò)誤“get”不被允許。


GenericAPIView

如果不想上面那么麻煩寫get,可以通過繼承ListApiView肯污,因?yàn)樗鼛臀覀儗懞昧恕?div id="q6eqe8y" class="image-package">
ListApiView

繼承ListApiView

一般列表頁的數(shù)據(jù)都需要分頁的翘单,只需要在settings.py中配置如下:
page_size配置

當(dāng)然 我們也可以自定義分頁設(shè)置:
from rest_framework.pagination import PageNumberPagination
設(shè)置自定義分頁

此時(shí),之前在settings.py配置的page_size就不需要了蹦渣。

viewsets和router完成商品列表頁

from rest_framework import viewsets



url配置

通過router配置url,會(huì)更方便哄芜。
from rest_framework.routers import DefaultRouter
router = DefaultRouter()
router.register(r'goods', views.GoodsViewSet)
urlpatterns = [
path(r'^', include(router.urls)),
]

drf的Apiview、GenericView柬唯、Viewset和router的原理分析

image.png

drf的過濾

drf的過濾

DjangoFilterBackend官方教程

https://www.django-rest-framework.org/api-guide/filtering/#djangofilterbackend

DjangoFilterBackend

顯然认臊,如上的過濾器的使用太限定了,所以我們可以通過自定義過濾器來實(shí)現(xiàn)靈活的過濾锄奢。https://django-filter.readthedocs.io/en/master/guide/rest_framework.html#quickstart
DjangoFilterBackend

python 跨域問題

https://www.cnblogs.com/fiona-zhong/p/9720270.html
django信號(hào)量

利用django信號(hào)量修改密碼

當(dāng)然別忘了還有一步操作失晴,在users下面的apps.py中添加
apps.py中引入信號(hào)量

用戶創(chuàng)建
用戶創(chuàng)建

聯(lián)合唯一
比如我們?cè)谟脩羰詹貢r(shí),就可以這樣設(shè)置:
聯(lián)合唯一設(shè)置

通過drf驗(yàn)證唯一
添加提示消息 “已經(jīng)收藏”
已經(jīng)收藏

pycharm遠(yuǎn)程代碼調(diào)試

tools->deployment->configuration

配置遠(yuǎn)程環(huán)境

選擇sftp

drf 緩存

pip install drf-extensions

然后將它的相關(guān)Import
import進(jìn)來

再加進(jìn)來即可拘央。
加入到viewset中

在setting中配置過期時(shí)間為5秒涂屁。
配置過期時(shí)間(全局)

drf配置redis緩存

由于 上一節(jié)是通過內(nèi)存緩存,每次項(xiàng)目重啟緩存數(shù)據(jù)就沒了灰伟,所以 我們可以配置 redis進(jìn)行數(shù)據(jù)緩存拆又。Github搜索星星多的項(xiàng)目它有中文開發(fā)文檔滴。https://django-redis-chs.readthedocs.io/zh_CN/latest/

pip install django-redis

  • 在setting中加入如下配置
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/1",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    }
}

drf的throttle設(shè)置api的訪問速率

文檔地址https://www.django-rest-framework.org/api-guide/throttling/
為了防止爬蟲栏账,所以 我們需要將api進(jìn)行訪問速率的限制帖族。限速也是drf自帶的功能,所以 不需要 安裝第三方的應(yīng)用 挡爵。
在配置文件中盟萨,將如下拷貝到drf的配置 中,如下:

REST_FRAMEWORK = {
    'DEFAULT_THROTTLE_CLASSES': (
        'rest_framework.throttling.AnonRateThrottle',
        'rest_framework.throttling.UserRateThrottle'
    ),
    'DEFAULT_THROTTLE_RATES': {
        'anon': '100/day',
        'user': '1000/day'
    }
}

其中了讨,兩個(gè)限速類,AnonRateThrottle是用戶未登錄的情況 下制轰;另一個(gè)UserRateThrottle是用戶登錄的情況下前计。它們兩個(gè)限速規(guī)則是不一致的。anon匿名用戶垃杖,設(shè)置時(shí)間區(qū)間男杈。100/day 一天可訪問100次,它的單位有 second, minute, hour or day .

  • 然后配置代碼中使用我們的限速
from rest_framework.throttling import UserRateThrottle
throttle_classes = (UserRateThrottle,)

如果超出了限制调俘,會(huì)提示429Too many requests的錯(cuò)誤信息伶棒。

django 第三方登錄

可以轉(zhuǎn)移githubhttps://github.com/python-social-auth/social-app-django文檔http://python-social-auth.readthedocs.io/

微博開發(fā)文檔https://open.weibo.com/wiki/%E6%8E%88%E6%9D%83%E6%9C%BA%E5%88%B6%E8%AF%B4%E6%98%8E

  • 實(shí)現(xiàn)過程
$ pip install social-auth-app-django

INSTALLED_APPS = (
    ...
    'social_django',
    ...
)

# 因?yàn)榈谌降卿?提供了額外的數(shù)據(jù)表 由于它migrations已經(jīng)幫我們生成好了 所以直接migrate
./manage.py migrate

由于mysql默認(rèn)用的表類型是myisam,這個(gè)其實(shí)一開始我就將它設(shè)為了innodb旺垒,因?yàn)閐jango里面有一些默認(rèn)的model不適配myisam有可能出錯(cuò),所以肤无。

表類型改成innodb

會(huì)生成5張數(shù)據(jù)表先蒋。


social_auth數(shù)據(jù)表

然后添加自己想要的第三方登錄,

AUTHENTICATION_BACKENDS = (
    'social_core.backends.weibo.WeiboOAuth2',
    'django.contrib.auth.backends.ModelBackend',
)

接下來在我們的url配置如下
這里提一嘴宛渐,就是我們下方配置的url默認(rèn)也是login/開頭的竞漾,會(huì)和我們之前 配過的有沖突,導(dǎo)致默認(rèn)進(jìn)入我們之前配置過的窥翩,所以我們可以在之前配置的login/,“”表示結(jié)尾业岁。

# 第三方登錄url
    url('', include('social_django.urls', namespace='social'))
    

在setting中加入:

'context_processors': [
                ...
                'social_django.context_processors.backends',
                'social_django.context_processors.login_redirect',
Context Processors

測(cè)試時(shí),可以在微博開放平臺(tái)設(shè)置回調(diào)地址寇蚊,
微博開放平臺(tái)設(shè)置回調(diào)地址

另外還要配置appkey,appsecret
配置開放平臺(tái)應(yīng)用信息

在登錄成功后笔时,指定登錄跳轉(zhuǎn)頁面
指定登錄成功后跳轉(zhuǎn)首頁
  • 常見web攻擊

1.sql注入攻擊及防范
對(duì)于用戶的輸入作合法性的判斷。
2.xss攻擊及防范

3.csrf攻擊及防范

踩坑:
安裝pip install django-filters不行仗岸,還是報(bào)找不到允耿,后來卸載裝的pip install django-filter

Flask篇

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市爹梁,隨后出現(xiàn)的幾起案子右犹,更是在濱河造成了極大的恐慌,老刑警劉巖姚垃,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件念链,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡积糯,警方通過查閱死者的電腦和手機(jī)掂墓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來看成,“玉大人君编,你說我怎么就攤上這事〈ɑ牛” “怎么了吃嘿?”我有些...
    開封第一講書人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)梦重。 經(jīng)常有香客問我兑燥,道長(zhǎng),這世上最難降的妖魔是什么琴拧? 我笑而不...
    開封第一講書人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任降瞳,我火速辦了婚禮,結(jié)果婚禮上蚓胸,老公的妹妹穿的比我還像新娘挣饥。我一直安慰自己除师,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開白布扔枫。 她就那樣靜靜地躺著汛聚,像睡著了一般。 火紅的嫁衣襯著肌膚如雪茧吊。 梳的紋絲不亂的頭發(fā)上贞岭,一...
    開封第一講書人閱讀 51,679評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音搓侄,去河邊找鬼瞄桨。 笑死,一個(gè)胖子當(dāng)著我的面吹牛讶踪,可吹牛的內(nèi)容都是我干的芯侥。 我是一名探鬼主播,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼乳讥,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼柱查!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起云石,我...
    開封第一講書人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤唉工,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后汹忠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體淋硝,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年宽菜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了谣膳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡铅乡,死狀恐怖继谚,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情阵幸,我是刑警寧澤花履,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站挚赊,受9級(jí)特大地震影響臭挽,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜咬腕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望葬荷。 院中可真熱鬧涨共,春花似錦纽帖、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至火鼻,卻和暖如春室囊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背魁索。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來泰國(guó)打工融撞, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人粗蔚。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓尝偎,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親鹏控。 傳聞我的和親對(duì)象是個(gè)殘疾皇子致扯,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容