一 web框架的本質css
1用戶的瀏覽器(socket客戶端) 和 網站的服務器(socket服務端)之間
2 HTTP協議:
1.1 請求(request)
1.2. 響應(response)
3 web框架本質 html
a. 收發socket消息 web服務器
web應用程序
b. 根據不一樣的請求執行不一樣的函數返回不一樣的內容
c. 字符串替換python
二 關於wsgi協議mysql
1 Django開發階段使用 wsgiref 模塊來處理socket消息
2 Django部署到線上使用 uWsgi/gunicorn 模塊來處理socket消息
3 Python中 web服務器程序和Web應用程序之間傳遞消息:
WSGI協議web
三 Python裏面Web框架的分類正則表達式
1. 本身實現b和c,使用第三方的a:
Django框架
2. 本身實現b,使用第三方的a和c:
Flask
3. 本身實現a\b\c:
Tornadosql
四 djanjo的安裝和建立djanjo項目數據庫
1 安裝django
pip3 install django==1.11.11
pip3 list 查看當前Python解釋器安裝了哪些第三方包
pip3 install django==1.11 -i https://pypi.tuna.tsinghua.edu.cn/simple # -i指定源
pip3 uninstall django #卸載bootstrap
2 建立djanjo項目
2.1 命令行建立(不經常使用)
先選擇一個目錄,而後運行下面命令
django-admin startproject s21django
在當前目錄下建立一個名爲 s21django 的Django項目
2.2 用pycharm建立
---》1新建項目
---》2指定項目路徑和選擇環境變量
--》指定app名字
---> 要在新的窗口打開
3 啓動djanjo項目
1.1 pyhcarm啓動方法,注意不能右鍵運行啓動!
2.1 命令行啓動(不經常使用)
--》1. 切換到項目目錄下!
--》2. python manage.py runserver
python manage.py runserver 127.0.0.1:8090 #指定ip和端口
python manage.py runserver 8091
4 建立app
1.1 在PyCharm建立(見建立項目圖,只能建立一個)
2.1 在命令行建立
1. 切換到項目目錄下!
2. python manage.py startapp app名字
3. 在settings.py裏面註冊你新建立的那個app,以下
1 # 當前Django項目安裝的app都有哪一些 2 INSTALLED_APPS = [ 3 'django.contrib.admin', 4 'django.contrib.auth', 5 'django.contrib.contenttypes', 6 'django.contrib.sessions', 7 'django.contrib.messages', 8 'django.contrib.staticfiles', 9 'app01.apps.App01Config', 10 'app02' # 將咱們建立的app02在Django項目註冊一下 11 ]
5. Django項目使用靜態文件的配置
--》1. 在項目目錄下新建一個保存靜態文件的文件夾
--》2. 告訴Django你去我上面新建的路徑去找靜態文件
settings.py中 加上相應的配置項:以下:
STATIC_URL = '/static/'
# 靜態文件實際保存的目錄是哪一些
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
-->3 在html頁面引入剛纔配置的靜態文件js和bootstrap
<link rel="stylesheet" href="/static/bootstrap-3.3.7/css/bootstrap.min.css">
五 MVC和MTV (瞭解便可)
1. MVC --> Model View Control
2. MTV --> Model Template views
六 基本路由系統 (urls.py)
1. 路由是一個有順序的列表,從上到下去匹配
2. 路由的路徑是根據正則表達式來匹配的
七. 基本視圖函數(views.py)
1. 基礎必會三件套
from django.shortcuts import HttpResponse, render
1. HttpResponse('字符串')
2. render(request, 'xx.html')
3. redirect 調轉到一個新的頁面
例子:
# 跳轉到index頁面,讓用戶的瀏覽器去訪問新的頁面(index頁面) return redirect("/index/") return HttpResponse("登陸失敗") # 給用戶返回一個頁面 用來作登陸 return render(request, 'login.html')
八 基本模板引擎(templates/xx.html)
2. 經常使用語法:
1. {{ 變量名 }}
2. {{ 變量名.key }}
3. for循環
{% for x in xx %}
{{x}}
{% endfor %}
4. if判斷
{% if 條件 %}
...
{% else %}
...
{% endif %}
九 使用orm鏈接數據庫
https://www.cnblogs.com/liwenzhou/articles/8276526.html orm具體介紹
鏈接實例:
1 在setting.py裏面設置要鏈接的數據庫
1 DATABASES = { 2 'default': { 3 'ENGINE': 'django.db.backends.mysql', # 引擎 4 'NAME': 's21hao', # 數據庫名 5 'HOST': '127.0.0.1', # 主機 6 'PORT': 3306, # 端口 7 'USER': 'root', # 用戶名 8 'PASSWORD': '' # 密碼 9 } 10 }
2 告訴Django用pymysql鏈接MySQL數據庫
在跟項目同名的文件夾下面的__init__裏面添加
1 import pymysql
2 pymysql.install_as_MySQLdb()
3 models.py裏面用orm寫數據庫語句,建立數據庫
1 class Publisher(models.Model): 2 id=models.AutoField(primary_key=True) 3 name=models.CharField(max_length=32) 4 5 def __str__(self): 6 return self.name
4 點開pycharm裏面的terminal,而後運行
1 python manage.py makemigrations --> 將models.py的改動記錄在小本本上
2 python manage.py migrate
5 創建數據庫表結構成功!能夠去數據庫裏查看
6 若是你想刪除,則吧models.py裏面的數據註釋掉,而後再次運行第四項的兩條語句便可
十 使用orm語句進行對數據庫單表的增刪改查
1 1. 查詢 2 models.Publisher.objects.all() --> 查詢全部的出版社數據 3 models.Publisher.objects.get(id=1) --> 查詢id=1的那個出版社 4 2. 增長 5 models.Publisher.objects.create(name='xx') --> 建立一個名爲xx的出版社 6 3. 刪除 7 models.Publisher.objects.get(id=2).delete() --> 刪除id=2的那個出版社 8 4. 編輯 9 obj = models.Publisher.objects.get(id=2) --> 找到要編輯的對象 10 obj.name = "新值" --> 修改 11 obj.save() --> 將修改同步到數據庫
十一 request相關知識點
1 1. request.method --> 獲取用戶請求的方法 2 - GET --> 表示用戶向我要一個頁面這種操做 3 - POST --> 表示用戶向我發送一些數據 4 2. request獲取URL中的參數 5 /xx/?name=alex&age=9000 6 request.GET --> 大字典 7 - request.GET['name'] --> 不推薦 8 - request.GET.get("name") --> 推薦 9 3. request.POST --> 一個大字典,存的是用戶post發過來的數據 10 1. request.POST['key'] --> 不推薦 11 2. request.POST.get('key', '默認值')
十二 djanjo裏面先後端交互的流程(登陸頁面)
0 djanjo目錄介紹
1 mysite/ 2 ├── manage.py # 管理文件 3 └── mysite # 項目目錄 4 ├── __init__.py 5 ├── settings.py # 配置 6 ├── urls.py # 路由 --> URL和函數的對應關係 7 └── wsgi.py # runserver命令就使用wsgiref模塊作簡單的web server
1 定義url在url.py文件裏面
from app01 import views urlpatterns = [ url(r'^login/', views.login), ]
2 而後去views裏面寫login函數(views.py)
1 def login(request): 2 3 if request.method=="POST": 4 print(request.POST) 5 username=request.POST.get("username","") #這裏的username必須和html裏面的name的值一致 6 pwd=request.POST.get("password","") 7 print(username,pwd) 8 if username=="hu" and pwd=="123": 9 return redirect("/index/") 10 else: 11 return HttpResponse("登陸失敗") 12 else: 13 return render(request,'login.html')
3 在templates目錄下面寫個login.html網頁,還要引入bootstrap等樣式
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>登陸頁面</title> 6 <link rel="stylesheet" href="/static/bootstrap-3.3.7/css/bootstrap.min.css"> 7 </head> 8 <body> 9 <div class="container" style="margin-top: 80px"> 10 <div class="row"> 11 <form class="form-horizontal" action="login.html" method="post"> 12 <div class="form-group"> 13 <label for="inputEmail3" class="col-sm-2 col-sm-offset-2 control-label">用戶名</label> 14 <div class="col-sm-4" > 15 <input type="text" name="username" class="form-control" id="inputEmail3" placeholder="用戶名"> 16 </div> 17 </div> 18 <div class="form-group"> 19 <label for="inputPassword3" class="col-sm-2 col-sm-offset-2 control-label">密碼</label> 20 <div class="col-sm-4 "> 21 <input type="password" name="password" class="form-control" id="inputPassword3" placeholder="密碼"> 22 </div> 23 </div> 24 25 <div class="form-group"> 26 <div class="col-sm-offset-5 col-sm-10"> 27 <button type="submit" class="btn btn-default">登陸</button> 28 </div> 29 </div> 30 </form> 31 </div> 32 </div> 33 34 </body> 35 </html>
4 要把bootstrap下載下來放到static目錄下,而且須要在settings.py裏面設置靜態文件目錄
STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'static') ]
5 在settings.py裏面要把 # 'django.middleware.csrf.CsrfViewMiddleware', 暫時註釋掉,不然不能提交