分爲:結構層(html),表示層(css),行爲層(js)。css
結構層html
超文本標記語言。由HTML或XHTML之類的標記語言負責建立。標籤,也就是那些出如今括號裏的單詞,對網頁內容的語義作出了描述,但這些標籤不包含任何關於如何顯示有關內容的信息。例如:p標籤表達了這樣一種語義:「這是一個文本段。」前端
表示層python
層疊樣式表。由css負責建立。css對「如何顯示有關內容」的問題作出了回答。mysql
行爲層nginx
客戶端腳本語言。負責回答「內容應該如何對事件作出反應」這一問題。這是JavaScript語言和DOM主宰的領域。ajax
二、html中總共有幾類標籤的?分別描述一下它們的不一樣?正則表達式
塊級標籤、內聯標籤、內聯塊狀標籤(img、input)。sql
內聯標籤不能包含塊級標籤,塊級標籤可以包含內聯標籤也可以包含塊級標籤(除了p元素,p元素不能相互包含,可是p元素可以包含其餘元素。)數據庫
三、display:none和visibility:hidden的區別?
a)display:none是完全消失,不在文檔流中佔位,瀏覽器不會解析該元素;visibility:hidden是視覺上消失了,在文檔流中會佔位,瀏覽器會解析該元素。
b)使用visibility:hidden比display:none性能上要好,display切換顯示時頁面會產生迴流(當頁面中的一部分元素須要改變規模尺寸、佈局、顯示隱藏等,頁面從新構建,此時就是迴流)而visibility切換顯示時則不會引發迴流。
四、input標籤都有哪些類型,input標籤都有哪些屬性?
類型:button、checkbox、file、hidden、image、password、radio、reset、submit、text
屬性:type、required、pattern(輸入內容必須徹底匹配正則表達式)、placeholder(提示輸入)、disabled(禁用)、name、id、style。
五、闡述一下css定位有幾種?並分別描述它們的不一樣。
relative(相對定位):相對定位的偏移參考元素是元素自己,不會使元素脫離文檔流。元素的初始位置佔據的空間會被保留。相對定位元素經常做爲絕對定位元素的父元素。而且定位元素常常與z-index屬性進行層次分級
absolute(絕對定位):絕對定位元素以父輩元素中最近的定位元素爲參考座標,若是絕對定位元素的父輩元素中沒有采用定位的,那麼此絕對定位元素的參考對象是html,元素會脫離文檔流。就好像文檔流中被刪除了同樣。而且定位元素常常與z-index屬性進行層次分級
position:fixed(固定):位移的參考座標是可視窗口,使用fixed的元素脫離文檔流。而且定位元素常常與z-index屬性進行層次分級
position:static(靜態定位):默認值,元素框正常生成的,top left bottom right這幾個偏移屬性不會影響其靜態定位的正常顯示
六、js的基礎數據類型有哪些?Null和Undefined的區別?
基礎數據類型:Undefined、Null、String、Number、Boolean。引用類型有這幾種:object、Array、RegExp、Date、Function、特殊的基本包裝類型(String、Number、Boolean)以及單體內置對象(Global、Math)。
Null和Undefined的區別:
null表示「沒有對象」,即該處不應有值。典型用法:
(1) 做爲函數的參數,表示該函數的參數不是對象。
(2) 做爲對象原型鏈的終點。
undefined表示「缺乏值」,就是此處應該有一個值,可是尚未定義。典型用法是:
(1)變量被聲明瞭,但沒有賦值時,就等於undefined。
(2) 調用函數時,應該提供的參數沒有提供,該參數等於undefined。
(3)對象沒有賦值的屬性,該屬性的值爲undefined。
(4)函數沒有返回值時,默認返回undefined。
七、列出jQuery經常使用的選擇器
基本css選擇器:元素選擇器、類選擇器、ID選擇器。
上下文選擇器:後代選擇器、兒子選擇器、兄弟選擇器、毗鄰選擇器
八、事件委託是什麼?
事件委託是利用事件的冒泡原理來實現的,何爲事件冒泡呢?就是事件從最深的節點開始,而後逐步向上傳播事件,舉個例子:頁面上有這麼一個節點樹,div>ul>li>a;好比給最裏面的a加一個click點擊事件,那麼這個事件就會一層一層的往外執行,執行順序a>li>ul>div,有這樣一個機制,那麼咱們給最外面的div加點擊事件,那麼裏面的ul,li,a作點擊事件的時候,都會冒泡到最外層的div上,因此都會觸發,這就是事件委託,委託它們父級代爲執行事件。
一、數據庫的字段類型有哪些?
二進制數據類型:Binary、Varbinary、Image
字符數據類型:Char,Varchar、text
Unicode數據類型:Nchar、Nvarchar、Ntext
日期和時間數據類型:數字數據類型包括正數和負數、小數和整數
smallint、int、bigint
二、說說你所知道的MySQL數據存儲引擎,InnoDB存儲引擎和MyISM存儲引擎的區別?
MySQL中經常使用的幾種存儲引擎:MyISAM、InnoDB、bdb、MEMORY
,
MyISAM存儲引擎:
MyISAM 這種存儲引擎不支持事務,不支持行級鎖,只支持併發插入的表鎖,主要用於高負載的select。因此其寫入的併發處理能力相對較弱。
MyISAM類型的數據表(.MYD文件)支持三種不一樣的存儲結構:靜態型、動態型、壓縮型。
靜態型:就是定義的表列的大小是固定(即不含有:xblob、xtext、varchar等長度可變的數據類型),這樣mysql就會自動使用靜態myisam格式。
使用靜態格式的表的性能比較高,由於在維護和訪問的時候以預約格式存儲數據時須要的開銷很低。可是這高性能是有空間換來的,由於在定義的時候是固定的,因此無論列中的值有多大,都會以最大值爲準,佔據了整個空間。
innoDB存儲引擎:
同MyISAM同樣的是,InnoDB存儲引擎也有.frm文件存儲表結構定義
innodb存儲引擎該mysql表提供了事務,回滾以及系統崩潰修復能力和多版本併發控制的事務的安全。
InnoDB有支持事務及安全的日誌文件,這個文件很是重要,InnoDB能夠經過日誌文件將數據庫崩潰時已經完成但還沒來得及將內存中已經修改但未徹底寫入磁盤的數據寫入磁盤,也能夠把已部分完成並寫入磁盤的未完成事務回滾,保證數據一致性。若是錯誤刪除日誌文件會致使數據庫崩潰且沒法啓動。
innodb支持自增加列(auto_increment),自增加列的值不能爲空,若是在使用的時候爲空的話就會進行自動存現有的值開始增值,若是有可是比如今的還大,則就保存這個值。
innodb存儲引擎支持外鍵(foreign key) ,外鍵所在的表稱爲子表而所依賴的表稱爲父表。
三、索引的本質是什麼?索引有什麼優勢?缺點是什麼?
索引(Index)是幫助MySQL高效獲取數據的數據結構。
優勢:
第一,經過建立惟一性索引,能夠保證數據庫表中每一行數據的惟一性。
第二,能夠大大加快數據的檢索速度,這也是建立索引的最主要的緣由。
第三,能夠加速表和表之間的鏈接,特別是在實現數據的參考完整性方面特別有意義。
第四,在使用分組和排序子句進行數據檢索時,一樣能夠顯著減小查詢中分組和排序的時間。
第五,經過使用索引,能夠在查詢的過程當中,使用優化隱藏器,提升系統的性能。
缺點:
第一,建立索引和維護索引要耗費時間,這種時間隨着數據量的增長而增長。
第二,索引須要佔物理空間,除了數據表佔數據空間以外,每個索引還要佔必定的物理空間,若是要創建聚簇索引,那麼須要的空間就會更大。
第三,當對錶中的數據進行增長、刪除和修改的時候,索引也要動態的維護,這樣就下降了數據的維護速度。
四、char和varchar的區別,varchar(50)和char(50)分別表明什麼意思?
char的長度是不可變的,而varchar的長度是可變的。
char的存取數度仍是要比varchar要快得多,由於其長度固定,方便程序的存儲與查找;可是char也爲此付出的是空間的代價,由於其長度固定,因此不免會有多餘的空格佔位符佔據空間,可謂是以空間換取時間效率,而varchar是以空間效率爲首位的。
五、簡述你對inner join、left join、right join的理解。
inner join(內鏈接),在兩張表進行鏈接查詢時,只保留兩張表中徹底匹配的結果集。
left join(左鏈接),在兩張表進行鏈接查詢時,會返回左表全部的行,即便在右表中沒有匹配的記錄。
right join(右鏈接),在兩張表進行鏈接查詢時,會返回右表全部的行,即便在左表中沒有匹配的記錄。
full join(全鏈接),在兩張表進行鏈接查詢時,返回左表和右表中全部沒有匹配的行。
1. Django的安裝
pip install django ==1.11.11
pip install -i yuan django==1.11.11
2. 建立項目
django-admin startproject 項目名
經過manage.py執行
CD項目目錄下
3.建立APP
python manage.py startapp app01
4. 啓動項目
python manage.py runserver # 127.0.0.1:8000
python manage.py runserver 80 # 127.0.0.1:80
python manage.py runserver 0.0.0.0: 80 # 0.0.0.0:80
5. 數據庫相關
python manage.py makemigrations # 記錄modeles 的變化,將變動記錄到 對應APP 下的 migrations
python manage.py migrate # 翻譯成SQL語句,去數據庫執行
-------------------------------------------------------------我是下劃線-----------------------------------------------------
配置settings.py
1. 數據庫相關
EGNIGE: 引擎 mysql sqllite3
NAME: 數據庫名字
HOST: IP
POST: 端口號 3306
USER: 用戶名
PASSWORD: 密碼 ‘ ’
2. 靜態文件相關
STATIC_URL= ‘static’ # 別名
STATICFILES_DIRS = [
os.path.join(BASE_DIR,'STATIC'),
]
3. APP
INSTALLED_APPS = [
'app01.apps.App01Config', #告訴 Django我本身新建了一個名叫app01的應用
# ‘app01’
]
4. CSRF
註釋掉CSRF中間件 form表單能夠提交POST請求
5. TEMPLATES
'DIRS':[os.path.join(BASE_DIR,'TEMPLATES')]
----------------------------------------------------------我是下劃線--------------------------------------------------------
ORM的對應關係
類 -------- 數據表
對象 -------- 數據行
屬性 -------- 字段
-----------------------------------------------------我是下劃線------------------------------------------------------
Django使用mysql數據庫的步驟:
1.手動建立mysql數據庫
2. 在settings.py中配置:
DATABASES = {
'default':{
'ENGINE': 'django.db.background.mysql', # 鏈接數據庫的類型
'NAME': 'mysite' # 數據庫名
'HOST': '127.0.0.1', # 數據庫主機地址
'POST': 3306 # 數據庫的端口
'USER': 'root',
'PASSWORD': ' ',
}
}
3. 告訴Django使用pymysql鏈接數據庫
在於settings.py 文件同級的目錄下的__init__.py寫代碼:
import pymysql
pymysql.install_as_MySQLdb()
4. 在models.py中寫類(繼承models.Model)
class Press(models.Model):
id = models.AutoField(primary_key=True) # id主鍵
name = models.CharField(max_length=32) # 出版社名稱
def __str__(self):
return '<這是一個出版社對象,它的名字是:{}>'.format(self.name)
# 書
class Book(models.Model):
id = models.AutoField(primary_key=True) #自增ID主鍵
title= models.CharField(max_length=30) # 書名
price = models.IntegerField() # 價格
# Django 1.11 默認就是級聯刪除 , Django2.0 以後必須指定on_delete
# to=關聯的表名
press = models.ForeignKey('Press_on_delete=models.CASCADE')
# 做者
class Author(models.Model):
id = models.AutoField(primary_key=True) # 自增ID主鍵
name = models.CharField(max_length=32) # 做者名字
books = models.ManyToManyField(to='book') # 只是ORM層面創建的一個多對多關係,不是做者表的一個字段
def __str__(self):
return self.name
5. 執行命名
python manage.py makemigrations # 記錄models的變化,將變動記錄到 對應APP下的migrations
python manage.py migrate # 翻譯成SQL語句,去數據庫執行
-----------------------------------------------------我是下劃線--------------------------------------------------------
ORM操做
1. 查:
from app01.models import User,Press,Book,Author
Press.objects.all() # 查詢全部出版社對象 ------ 對象列表 queryset
Press.objects.filter(條件) # 查詢全部知足條件的出版社對象 ------ 對象列表 queryset
Press.objects.get(條件) # 查詢有且只能有一個對象 沒有或者多個都報錯 ---- 對象
屬性:
press_obj.id
press_obj.name
外鍵:
book_obj.id
book_obj.title
book_obj.press -------關聯的對象
book_obj.press_id -------數據庫中的關聯對象的ID
book_obj.press.id
多對多:
author——obj.books ------管理對象
author_obj.books.all() ------做者關聯的全部書籍對象
2. 增長:
new_obj = Press.objects.create(name='新的出版社')
Book.objects.create(title='書名',price = 15,press=press_obj)
Book.objects.create(title='書名',price=15,press_id=press_obj.id)
new_obj = Author.objects.create(name='做者名')
new_obj.books.set([1,2,3])
new_obj.books.set([book1,book2])
new_obj.books.add(1,2,3)
3. 刪除
book_obj.delete() ------刪除單個對象
Press.objects,filter(條件).delete() -------刪多個對象
4. 編輯
press_obj.name = '新的出版社名字'
press_obj.save()
book_obj.press = press_obj
# book_obj.press_id = press_obj.id
book_obj.save()
author_obj.name = '做者名'
author_obj.save()
author_obj.books.set([1,2,3])
二、Django的settings中,你用到的配置項有哪些?它們的做用是什麼?
TEMPLATE_DIRS
模板文件存放的目錄.該值是一個元組.
STATIC_URL
映射到靜態文件的url,通常爲/static/.
在模板中使用{{STATIC_URL}},獲得的就是這個值.
或者在模板中先{% load staticfiles %},而後使用{% static 「my_app/abc.jpg」 %},該模板標籤的值爲/static/my_app/abc.jpg
最好使用nginx代理該url,訪問靜態文件時不經過django,而是直接由nginx訪問.
注意:若是用ngxin代理的話,那麼每次修改static文件,都須要執行一遍collectstatic命令
STATICFILES_FINDERS
默認該值以下:
‘django.contrib.staticfiles.finders.FileSystemFinder’,
‘django.contrib.staticfiles.finders.AppDirectoriesFinder’
FileSystemFinder告訴django從STATICFILES_DIRS設置的全部目錄下尋找靜態文件
AppDirectoriesFinder告訴Django從INSTALLED_APPS中每個app下的static/ 子目錄下去尋找靜態文件
STATIC_ROOT
是總的static目錄,可使用命令自動收集static文件
使用命令python manage.py collectstatic收集靜態文件,將全部靜態文件複製到STATIC_ROOT設置的目錄下.
STATICFILES_DIRS
是個元組,每一項都是靜態文件存放的目錄.
當執行collectstatic命令時,會將STATICFILES_DIRS下的全部靜態文件收集到STATIC_ROOT目錄下.
三、Django使用MySQL數據庫的流程是什麼?
四、分別定義一個FBV和CBV,以及它們的路由?
FBV
from
django.shortcuts
import
render
def
index(req):
if
req.method
=
=
‘POST‘:
print
(‘method
is
:‘
+
req.method)
elif
req.method
=
=
‘GET‘:
print
(‘method
is
:‘
+
req.method)
return
render(req, ‘index.html‘)
url(r‘^index
/
‘, views.index),
CBV
from
django.views
import
View
class
Index(View):
def
get(
self
, req):
print
(‘method
is
:‘
+
req.method)
return
render(req, ‘index.html‘)
def
post(
self
, req):
print
(‘method
is
:‘
+
req.method)
return
render(req, ‘index.html‘)
url(r‘^index
/
‘, views.Index.as_view()),
五、寫出你知道的request對象的方法和屬性。
request對象的方法:
request對象的屬性:
0.HttpRequest.scheme(表示請求方案的字符串)
1.HttpRequest.body(一個字符串,表明請求報文的主體)
2.HttpRequest.path(一個字符串,表示請求的路徑組件(不含域名))
3.HttpRequest.method(一個字符串,表示請求使用的HTTP 方法。必須使用大寫。)
4.HttpRequest.encoding(一個字符串,表示提交的數據的編碼方式)
5.HttpRequest.GET(一個相似於字典的對象,包含 HTTP GET 的全部參數)
6.HttpRequest.POST(一個相似於字典的對象,若是請求中包含表單數據,則將這些數據封裝成 QueryDict 對象。)
7.HttpRequest.COOKIES(一個標準的Python 字典,包含全部的cookie。鍵和值都爲字符串。)
8.HttpRequest.FILES(一個相似於字典的對象,包含全部的上傳文件信息。)
9.HttpRequest.META(一個標準的Python 字典,包含全部的HTTP 首部)
10.HttpRequest.user(一個 AUTH_USER_MODEL 類型的對象,表示當前登陸的用戶。)
11.HttpRequest.session(一個既可讀又可寫的相似於字典的對象,表示當前的會話)
六、如何在URLconf中給url命名?在視圖和模板中如何使用url反向解析?
urlpatterns = patterns('', (r'^mydata/(?P<id>\d+)/$', views.my_view, {'id':3}), )
在模板(能夠理解爲HTML文件)裏面能夠這樣引用:
{% url "home" %}
在views函數中能夠這樣引用:
from django.urls import reverse redirect(reverse("index",args=("2018", )))
七、請寫出你所知道的模板語法。
1、模板語法之變量:語法爲 {{ }}:
{{ d.name }}
{{ person_list.1.name }}
2、模板語法之標籤:語法爲 {% tag %}:
一、for標籤(注:循環序號能夠經過{{forloop}}顯示)
二、for....empty :for 標籤帶有一個可選的{% empty %} 從句,以便在給出的組是空的或者沒有被找到時,能夠有所操做。
{% for person in person_list %}
<p>{{ person.name }}</p> {% empty %} <p>sorry,no person here</p> {% endfor %}
三、if標籤 :{% if %}會對一個變量求值,若是它的值是「True」(存在、不爲空、且不是boolean類型的false值),對應的內容塊會輸出。
{% if i > 300 %}
<p>大於{{ i }}</p> {% elif i == 200 %} <p>等於{{ i }}</p> {% else %} <p>小於{{ i }}</p> {% endif %}
四、with:使用一個簡單地名字緩存一個複雜的變量,當你須要使用一個「昂貴的」方法(好比訪問數據庫)不少次的時候是很是有用的
{% with total=business.employees.count %}
{{ total }} employee{{ total|pluralize }}
{% endwith %}
<p>{{ person_list.2.name }}</p> {% with name=person_list.2.name %} <p>{{ name }}</p> {% endwith %}
五、csrf_token:這個標籤用於跨站請求僞造保護
<h3>scrf_token</h3><form action="/tag/" method="post"> {% csrf_token %} <p><input type="text" name="haiyan"></p> <input type="submit"> </form>
八、請寫出模板和繼承的使用方法。
1)繼承使用
步驟1:母板裏寫入block,就能夠被繼承,content是名稱
{% block title %} {% endblock%} {% block 「content「 %} {% endblock%}
步驟2:子頁面經過extends指定繼承那個模板
{% extends 'master.html'%} #繼承那個模板 {% block 「content「 %} 這個地方就是替換模板block 「content「 <ul> {% for i in u%} <li>{{i}}</li> {%endfor%} {% endblock%}
2)一個頁面只能繼承一個模板,如何解決了?如何使用多個模板,或者引入其餘頁面
<% include "a.html" %> 能夠引用屢次
九、請寫出自定義filter的步驟。
十、cookie和session是什麼?爲何要使用它們?
1、爲何要用Cookie和Session?
不少時候客戶端和服務器進行交互使用了HTTP協議,可是HTTP協議是無狀態的;HTTP協議的請求過程,是基於 TCP/IP 的,當客戶端請求服務器,服務器處理後,進行響應,該過程是無狀態的。
可是在有些時候是須要保存一些客戶端的請求信息,識別客戶端的某些狀態,智能的、有針對性的去分析某些客戶端的習慣。這些時候,就須要去記錄客戶端的鏈接狀態,識別請求的狀態等。因此爲了解決相似的事情,就須要使用到了 Cookie 和 Session。
好比,使用Cookie的場景:有些網站有記住用戶名的功能,當你勾這個的時候,下次進入該網站時,就會保存上一次登陸的用戶名;使用Seesion的場景:利用Seesion來驗證用戶是否已登陸,利用Session來保存驗證碼。
2、Cookie和Session是什麼?
(1)Cookie:在客戶端訪問某個地址時,會將請求交到服務器進行處理,在發送請求的時候,瀏覽器會將頁面的頭部信息一併的交到服務器端進行處理。在處理的過程當中,Cookie 在服務器端生成 ,在此同時,能夠將一些須要保存的信息,存放到此 Cookie 中。生成 Cookie 對象時,須要肯定具體的名稱及具體的值,能夠設置當前 Cookie 的過時時間,設置過時時間後,就至關於持久化了 Cookie 中的數據,此時的 Cookie 會以以前的 Cookie 名稱,保存在客戶端。
若是不設置過時時間,則當前 Cookie 的生命期是瀏覽器會話期間,一旦關閉了該瀏覽器,當前的Cookie 就會不存在了,此時的 Cookie 信息是保存在內存中。在服務器端,處理完後,會將生成的 Cookie ,隨着 Http 響應,會在 Http 響應頭中,加上Cookie 信息,瀏覽器接受到響應後,會按照 Http 響應頭裏的 Cookie ,在客戶端創建 Cookie 。在下次客戶進行請求的時候,Http 會附帶着已經存儲過的 Cookie,一併發送到服務器。一個域,在客戶端創建的因此 Cookie 都是能夠共享的,只要 Cookie 沒有過時。
(2)Session:Session 是在服務器端生成的,存儲在服務器端,即存在內存中。能夠對生成的 Session 設置過時時間,若是不設置過時時間,默認的 Session 過時時間是30 分鐘(在不一樣的服務器中,它的過時時間略有不一樣,本文是以 Tomcat 來講的) 可是,Sesssion 的生成的同時,會生成一個與之相關聯的的 SessionID ,此 SessionID的存儲是須要 Cookie 來完成的。 SessionID 是以名稱爲 JSESSIONID,其值應該是一個既不會重複,又不容易被找到規律以仿造的字符串。SessionID會隨着這次 Http 響應,一併返回到客戶端,並保存在客戶端中。到當前請求再次發出後,該 SessionID會隨着 Http 頭部,傳到服務器中,服務器依據當前 SessionID 獲得與之對應的 Session.
其中:經過 Cookie 的方式存儲 Session 狀態,只是其中一種方式。若是客戶端禁用了 Cookie 的話,不少網站任然能夠存儲用戶的信息。一種處理的方式是URL 重寫,將 SesseionID 直接附加在請求地址的後面。另外一種處理的方式是,使用隱藏自動的方式。就是服務器自動的在表單中,添加一個隱藏字段,以便在表單提交時,將 SesseionID 一塊兒傳到服務器,進行識別。