01-05第九周周報(bào)

本周是第九周胶果,主要學(xué)習(xí)web服務(wù)器開發(fā)暂刘,django項(xiàng)目的創(chuàng)建锨侯,在老師的領(lǐng)導(dǎo)下開發(fā)了一個(gè)簡(jiǎn)易的投票django項(xiàng)目嫩海,了解了部分web應(yīng)用機(jī)制與術(shù)語,以及一些擴(kuò)展知識(shí)囚痴。在周末對(duì)本周知識(shí)點(diǎn)進(jìn)行了回顧與梳理叁怪。

第9周知識(shí)點(diǎn)整理

web應(yīng)用機(jī)制和術(shù)語
-URL/URI
-DNS
-IP地址
-http/https協(xié)議
-反向代理 : 保護(hù)服務(wù)器免于被直接攻擊與配置負(fù)載均衡
-web服務(wù)器 - Nginx/Apache
-應(yīng)用服務(wù)器 - uwsgi/gunicorn
-其他服務(wù)器 - redis,mysql深滚,sendmail奕谭,nfs,kafka等
web框架:django痴荐,flask血柳,tornado,sanic生兆,fastapi
HTTP協(xié)議是無連接無狀態(tài)協(xié)議 --> 兩次請(qǐng)求之間不會(huì)保存用戶任何數(shù)據(jù)
再次請(qǐng)求服務(wù)器時(shí)难捌,服務(wù)器無法得知請(qǐng)求來自誰的請(qǐng)求

對(duì)本地代碼實(shí)行版本控制并同步至版本控制服務(wù)器

git init
git add .
git commint -m 'version-name'
git status/ git log
git remote add origin url
git push -u(第一次) origin master

數(shù)據(jù)庫相關(guān)
以下使用MySQL數(shù)據(jù)庫
-DDL:create drop alter
-DML:insert delete update
-DQL:select
-DCL:grant revoke

項(xiàng)目架構(gòu)模式:MVC
數(shù)據(jù)和顯示分離
同一個(gè)模型可以渲染成不同視圖,同一個(gè)視圖可以加載不同的模型

django ORM框架
對(duì)象關(guān)系映射框架 - 解決對(duì)象模型的關(guān)系模型雙向轉(zhuǎn)換問題

django項(xiàng)目創(chuàng)建:

  • 首先安裝框架 - pip install django==version

  • 創(chuàng)建并運(yùn)行django項(xiàng)目
    - pycharm方法

    1. 用PyCharm創(chuàng)建一個(gè)普通的Python項(xiàng)目
    2. 安裝Django所需的依賴項(xiàng)
      -pip install django==2.1.14
    3. 把Python項(xiàng)目變成Django項(xiàng)目
      -django-admin startproject django1906 .
    4. 運(yùn)行項(xiàng)目
      • python manage.py runserver
      • Add Configuration - Python - Script Path (manage.py) - Parameters (runserver)

    - 克隆方式:

    1. 克隆項(xiàng)目到本地
      -使用PyCharm的"get from version control"
      -git clone git-url
    2. 創(chuàng)建虛擬環(huán)境
      -Linux/macOS: source venv/bin/activate
      -Windows: "venv/Scripts/activate"
    3. 重建依賴項(xiàng) - pip install -r requirements.txt

settings.py 部分修改:

# 加載web應(yīng)用
INSTALLED_APPS = [
    .....
    'app_name',
] 
# 模板路徑
TEMPLATES = [
    {
        ...
        'DIRS': [os.path.join(BASE_DIR, 'templates'), ],
        ...
] 
# 數(shù)據(jù)庫
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': '項(xiàng)目名',
        'HOST': '',
        'PORT': 3306,
        'USER': '',
        'PASSWORD': '',
        'CHARSET': 'utf8',
        'TIME_ZONE': 'Asia/Chongqing',
    }
}
# 語言時(shí)間
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Chongqing'
# 靜態(tài)資源路徑
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static'), ]
STATIC_URL = '/static/' - 靜態(tài)資源
# 服務(wù)器存儲(chǔ)圖片
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/' 

urls.py template模板路徑:

# -服務(wù)器圖片儲(chǔ)存設(shè)置
urlpatterns = [
    path('admin/', admin.site.urls),
    path('', index), 
    path('teachers/', show_teachers),
    path('praise/', praise_or_criticize),
    path('criticize/', praise_or_criticize),
    path('login/', login),
    path('logout/', logout),
    path('captcha/', get_captcha),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 

views.py 數(shù)據(jù)的渲染皂贩,http請(qǐng)求與響應(yīng):

#  返回request對(duì)象栖榨,響應(yīng)頁面昆汹,數(shù)據(jù)
def index(request):
    """首頁明刷,所有學(xué)科"""
    queryset = Subject.objects.all()
    context = {
        'subjects': queryset
    }
    return render(request, 'subjects.html', context)

創(chuàng)建Django后臺(tái)超級(jí)管理員賬號(hào)
命令終端 - python manage.py createsuperuser
后臺(tái)網(wǎng)址 - http://127.0.0.1:8000/admin

admin.py django自帶后臺(tái)管理設(shè)置:

class UserAdmin(admin.ModelAdmin):
    list_display = ('no', 'username', 'password', 'reg_date', 'email', 'tel', 'last_visit')
    list_display_links = ('no', 'username')   # 管理鏈接
    search_fields = ('username',)  # 根據(jù)username字段搜索
    ordering = ('no',)  # 根據(jù)no字段排序
admin.site.register(User, UserAdmin)

models.py 使用django數(shù)據(jù)庫語句對(duì)數(shù)據(jù)庫進(jìn)行操作:

class User(models.Model):
    """用戶模型類"""
    no = models.AutoField(primary_key=True, verbose_name='編號(hào)')
    username = models.CharField(max_length=20, unique=True, verbose_name='用戶號(hào)')
    password = models.CharField(max_length=32, verbose_name='口令')
    email = models.CharField(default='', max_length=256, verbose_name='郵箱')
    tel = models.CharField(max_length=11, verbose_name='手機(jī)號(hào)')
    reg_date = models.DateTimeField(auto_now_add=True, verbose_name='注冊(cè)日期')
    last_visit = models.DateTimeField(verbose_name='最后訪問時(shí)間')

    def save(self):  # 保存方法重寫
        self.password = to_md5_hex(self.password)  # 產(chǎn)生摘要
        super().save()

    class Meta:   # 元數(shù)據(jù)
        db_table = 'tb_user'
        verbose_name = '用戶'
        verbose_name_plural = '用戶'

數(shù)據(jù)遷移:
python manage.py makemigrations app_name
python manage.py migrate

其他知識(shí)點(diǎn)補(bǔ)充:
CSRF ---> 跨站請(qǐng)求偽造 ---> {% csrf_token %}
Cross Site Request Forge
CSRF令牌兩個(gè)作用:防范重放攻擊和跨站偽造請(qǐng)求

用于跟蹤 --> 服務(wù)器需要記住用戶為用戶提供更好的服務(wù)
服務(wù)器記住用戶有三種方式:
1.URL重寫
2.隱藏域(隱世表單域) --> 埋點(diǎn)
3.瀏覽器本地存儲(chǔ) - 最常見
- cookie:瀏覽器臨時(shí)文件,保存鍵值對(duì)满粗,cookie中的數(shù)據(jù)在發(fā)起HTTP請(qǐng)求時(shí)會(huì)自動(dòng)加載請(qǐng)求頭中辈末,如果瀏覽器禁用了cookie,基本上目標(biāo)網(wǎng)站的功能不能使用
- window.localStorage / window.sessionStorage

cookie和session的關(guān)系
request.session --> 服務(wù)器的一個(gè)對(duì)象
cookie --> 用戶瀏覽器臨時(shí)文件 --> cookie保存了session的id

BASE64編碼 - 用64個(gè)文字符號(hào)表示任意二進(jìn)制數(shù)據(jù)
原理:將原來的三字節(jié)每6個(gè)比特一組變成四個(gè)字節(jié)
用A-Z映皆、a-z挤聘、0-9、+和/一共64個(gè)字符來代表一個(gè)字節(jié)
Python ---> base64模塊 ---> b64encode() / b64decode()
JavaScript ---> window ---> btoa() / atob()

加密解密 RSA / AES ---> pycrypto
編碼解碼 base64 / 百分號(hào)編碼 ---> base64 / urllib.parse
摘要簽名 md5 sha1 sha256 sha512 ---> hashlib

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末捅彻,一起剝皮案震驚了整個(gè)濱河市组去,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌步淹,老刑警劉巖从隆,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件诚撵,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡键闺,警方通過查閱死者的電腦和手機(jī)寿烟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來辛燥,“玉大人筛武,你說我怎么就攤上這事】嫠” “怎么了徘六?”我有些...
    開封第一講書人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)勃蜘。 經(jīng)常有香客問我硕噩,道長(zhǎng),這世上最難降的妖魔是什么缭贡? 我笑而不...
    開封第一講書人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任炉擅,我火速辦了婚禮,結(jié)果婚禮上阳惹,老公的妹妹穿的比我還像新娘谍失。我一直安慰自己,他們只是感情好莹汤,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開白布快鱼。 她就那樣靜靜地躺著,像睡著了一般纲岭。 火紅的嫁衣襯著肌膚如雪抹竹。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,443評(píng)論 1 302
  • 那天止潮,我揣著相機(jī)與錄音窃判,去河邊找鬼。 笑死喇闸,一個(gè)胖子當(dāng)著我的面吹牛袄琳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播燃乍,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼唆樊,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了刻蟹?” 一聲冷哼從身側(cè)響起逗旁,我...
    開封第一講書人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎舆瘪,沒想到半個(gè)月后片效,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體仓洼,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年堤舒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了色建。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡舌缤,死狀恐怖箕戳,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情国撵,我是刑警寧澤陵吸,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站介牙,受9級(jí)特大地震影響壮虫,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜环础,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一囚似、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧线得,春花似錦饶唤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至角雷,卻和暖如春祸穷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背勺三。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來泰國打工雷滚, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人檩咱。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓揭措,卻偏偏與公主長(zhǎng)得像胯舷,于是被迫代替她去往敵國和親刻蚯。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

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