Django小範圍傻瓜總結
1.母版:
layout.html
{% block x %}{% endblock %}
2.子版:
{% extends ‘layout‘ %}
{% block x %}.......{% endblock %}
3.Cookie
在瀏覽器上保持的鍵值對,參數(超時時間,域名)
服務器寫Cookie:
#obj=HttpReponse(...)
#obj=render(...)
obj=redirect(...) #不一定是redirect三個中的任意一個都行
obj.set_cookie(k1,v1,max_age) #max_age超時時間,過了這個時間就消失了
obj.set_signed_cookie(k1,v1,max_age,salt=‘fff‘) #加鹽版
獲取Cookie:
request.COOKIES.get(‘k1‘)
request.get_signed_cookie(‘k1‘.salt=‘fff‘) #接收加鹽版Cookie
Cookie作用登錄和限制操作次數(投票)
[email protected]
5.後臺管理頁面布局
左面菜單欄占200多,右邊全占用
position:absolute;
overlow:scroll;
<div class=‘div1‘>
<span class=‘span1‘>abc</span>
</div>
.div1:hover .span1{
當鼠標移動到父標簽div的時候他的孩子span發生想要的變化
}
position中三個屬性:absolute,relative,fixed
之前:自己建立app01 自己創建目錄-view.py 用SQLHelper封裝SQL操作
這些工作django都已經內部做好了,今天就來發揮django10成的功力
6.三個框架
Django:
路由
視圖
模板
ORM框架(本質上在內部,類-表,對象-行,連接數據庫還是用pymysql)
Torando:
路由
視圖
模板
pymysql,SQLAchemy(沒有ORM框架可以隨便用,就是有也可以隨便用,但是既然有就用)
flask:
路由
視圖
模版(第三方組件)
pymysql,SQLAchemy(也沒有ORM框架,瞎胡用)
7.app01目錄:
migrations -數據庫相關使用的,講modal的時候會說
admin -django在內部寫的一個後臺管理,用來配置後臺管理進去之後能做什麽操作,可以代替nevicate了
apps -當前app01的相關的配置文件可以下在這裏
models -django的ORM類就寫在這個文件裏面,類->表
test -快速的做一個單元測試
8.路由系統
url -> 函數
a. /login/ -> def login
b. /add-user/(\d+) -> def login 在url上還可以寫正則表達式
c. get傳值:權重低,搜索結果在後面,百度爬蟲會認為?後面的東西會經常變
d. .html偽靜態,靜態文件訪問速度快,增加權重,哄用戶,騙百度
e. url(r‘^edit$‘, views.edit) 推薦用這個
f. 偽靜態:
類似靜態網站,一訪問就直接把模板返回,動態網站需要從數據庫拿
點東西然後進行模板渲染在返回給瀏覽器,後者比較慢
例:url(r‘^edit/(\w+).html$‘,views.edit)
g. 路由分發:
宗旨:讓每一個app裏面都有一個自己的url路由系統 include
引入include通過他把引路 url(r‘^app01/‘,include(‘app01.urls‘))
h. 起別名: url(r‘^index/(?P<a1>\d+)/‘, views.index,name=‘n1‘)
根據名字反推出url:
1.在Python中先導入reverse
2.反生成url
url分為三種:
1.一對一
2.正則表達式類的url,加幾節url就要在函數中對應有幾個參數接收
3.include -- url分發
9.別名的運用:
別名和ORM是Django框架特有的
***註意:
如果是url一對一的話:在函數中也就是後臺通過reverse反轉的url,就是函數對應的url,這個沒毛用
url正則情況:在函數中通過reverse反轉的url,開始斷不變其他隨意變的東東
如果是前端替換的話:可以利用urls文件中寫的任意別名
--------------------------------------------------------------------- 數據庫裏面存放著每個用可以看到的url表,比如: 方柯基:/index/a/b/c/d/e/ /login/a/b/c/d/e/ /duantui/a/b/c/d/e/ 當用戶方柯基一登錄的時候,我們就要從數據庫拿到這些數據,再通過模板 渲染後發送給服務器,在模板中我們要循環這些url插入到a標簽中 <ul> for url in url_list: <li><a href=‘{{url}}‘>ff</a><li> </ul> 但是這樣的話url很長,而且一眼看不出幹啥的,於是就有了別名 我們在數據庫就存這個 方柯基:n1 n2 n3 這樣我們在數據庫放的東西也少了,而且別名由我們自己取,我們 可以自己起一個適合的名字。渲染的時候變一下就可以了 <ul> for name in name_list: <li><a href=‘{% url name %}‘>ff</a><li> </ul> ---------------------------------------------------------------------
10.視圖函數:
CBV:圍繞類來寫,就是面向對象
FBV:圍繞函數來寫,之前就是一直這麽搞
11.ORM操作
在HTTP請求中: url->視圖(模板+數據) ORM功能: 1.操作表 創建表 修改表sqlAlchemy不能修改表 刪除表 2.操作數據行 增刪改查 ORM利用pymysql等第三方工具去連接數據庫 默認:連接數據庫用的是MySQLDB,需要修改為pymysql Django連數據庫連得是SQLlite是文件型數據庫 需要修改的地方: 1.將MySQLdb修改為pymysql 2.把SQLlite改為mysql 步驟: CMD: django-admin startproject mysite6 cd mysite6 python manage.py startapp app01 python manage.py startapp app02 python manage.py startapp app03 一個project裏面可以有多個app(一個app可以作為一個業務線) 1.創建數據庫 2.DATABASES = { ‘default‘: { ‘ENGINE‘: ‘django.db.backends.mysql‘, ‘NAME‘:‘db6‘, ‘USER‘: ‘root‘, ‘PASSWORD‘: ‘‘, ‘HOST‘: ‘localhost‘, ‘PORT‘: 3306, } } 3.import pymysql pymysql.install_as_MySQLdb() 4.在models中創建: class UserInfo(models.Model): nid=models.BigAutoField(primary_key=True) username=models.CharField(max_length=32) password=models.CharField(max_length=64) 5.註冊app01 INSTALLED_APPS = [ ‘django.contrib.admin‘, ‘django.contrib.auth‘, ‘django.contrib.contenttypes‘, ‘django.contrib.sessions‘, ‘django.contrib.messages‘, ‘django.contrib.staticfiles‘, ‘app01‘ ] 6.創建數據表 Python manage.py makemigrations python manage.py migrate 7.class UserGroup(models.Model): ‘‘‘ 部門 ‘‘‘ title=models.CharField(max_length=32) class UserInfo(models.Model): ‘‘‘ 員工 ‘‘‘ nid=models.BigAutoField(primary_key=True) #AutoField 自動字段,這裏是自增字段相當於自增int類型 user=models.CharField(max_length=32) password=models.CharField(max_length=64) # age=models.IntegerField(null=True) age=models.IntegerField(default=1) ug=models.ForeignKey("UserGroup",null=True)
Django小範圍傻瓜總結