Django主要目錄結構
# 以創建mysite項目為例
mysite文件夾
mysite同名文件夾
settings.py
# django暴露給用戶可以自定義配置的文件
urls.py
# 存放路由(路徑)與函數(視圖函數)對應關系
wsgi.py
# 依賴於wsgiref模塊的socket啟動部分
manage.py文件
# django的入口(啟動)文件
app01文件夾
migrations文件夾
# 里面存放ORM針對數據庫相關的記錄,相當於日志
admin.py
# django自帶的后台管理功能
apps.py
# 每個應用的獨立標識
models.py
# 與數據庫打交道的文件(ORM)
tests.py
# 自帶的測試文件
views.py
# 該app對應的主體功能(函數 類)
db.sqlite3
# django自帶的小型數據庫(針對日期格式無法精准存取)
"""
1.創建app之后一定要去settings.py中注冊
INSTALLED_APPS = [
# 全寫
'app01.apps.App01Config',
# 簡寫
'app02'
]
2.templates路徑配置
TEMPLATES = [
{
'DIRS': [os.path.join(BASE_DIR, 'templates')]
}
"""
django是可以自動重啟的 但是有時候自動重啟的反應時間有點長
django小白必會三板斧
1.HttpResponse
HttpResponse('hello django!')
暫且理解為可以返回給前端瀏覽器文本類的數據
2.render
render(request,'index.html',{'n1':[1,2,3]}) # 精准傳(復雜但節省資源)
render(request,'index.html',locals()) # 范圍傳(簡單但不節省資源)
返回給前端瀏覽器html頁面 並且提供模板語法(不需要借助jinja2模塊)
# 注:定義函數時記得加個request形參
html文件接收其他參數 {{'n1'}}
支持在html模板語法:遍歷直接寫個for按table鍵自動補全
3.redirect
重定向
redirect('https://www.baidu.com') # 可以寫全稱
redirect('/admin/') # 也可以只寫后綴(默認補齊當前IP和PORT)
urls.py 存放路由與視圖函數對應關系 路由層
views.py 存放視圖函數(核心業務邏輯) 視圖層
templates文件夾 存放html文件 模板層
models.py 存放與數據庫相關的代碼(ORM) 模型層
"""
1.django默認的端口號是8000
在同一台機器同一時間如果需要運行多個django項目 需要修改端口號
python3 manage.py runserver ip:port
pycharm自主修改
2.瀏覽器緩存(django修改之后沒有效果)
修改谷歌瀏覽器設置,打開檢查界面會自動清除緩存
打開檢查界面
settings
networks
disable cache(勾選)
"""
靜態文件配置
# 利用django編寫用戶登錄功能
# 什么是靜態文件
不會頻繁更改的文件
css文件、js文件、第三方框架文件、圖片
# django存儲靜態文件
我們需要新建一個static文件夾用來存放靜態文件
static文件夾
該文件內部還可以依據不同的功能划分不同的區域
css文件夾
js文件夾
img文件夾
others文件夾
'''為什么前端請求不到后端的框架資源:我們沒有開設對應的資源接口'''
# 如何開放接口
一般接口我們需要在urls.py文件中建立對應關系,針對靜態資源的路徑開設無需在urls.py中指定 只需要在配置文件(setting.py)指定即可
找到這一行:STATIC_URL = '/static/',在底下添加
STATICFILES_DIRS = [
os.path.join(BASE_DIR,'static')
]
/static/bootstrap-3.4.1-dist/js/bootstrap.min.js
這樣只要我們的路徑輸入正確就可以訪問static文件夾下的內容
# 注:兩個static表示的作用並不相同
# 進階關系
STATIC_URL = '/static/' # 接口前綴(要想訪問靜態資源 那么路徑的前綴就必須是這里指定的/static/) 接口前綴可以修改,但我們一般不會修改
# 進行路徑的拼接,將static文件夾添加到配置文件(可以將static文件夾下所有的資源開設給外界)
STATICFILES_DIRS = [
os.path.join(BASE_DIR,'static'), # 文件夾名稱
os.path.join(BASE_DIR,'static1'), # 文件夾名稱
os.path.join(BASE_DIR,'static2') # 文件夾名稱
]
"""
接口前綴正確之后 拿着后面的路徑去列表中
從上往下依查找對應的資源 找到了就不再繼續往下找
"""
# 接口前綴動態匹配
# 固定搭配,記住即可,在html文件導入靜態文件的時候
{% load static %}
<link rel="stylesheet" href="{% static 'bootstrap-3.4.1-dist/css/bootstrap.min.css' %}">
<script src="{% static 'bootstrap-3.4.1-dist/js/bootstrap.min.js' %}"></script>
網絡請求方式
1.get請求
向別人索要數據
eg:瀏覽器地址欄輸入www.baidu.com回車
get請求沒有請求體
get請求也可以攜帶一些的額外的參數 但是大小有限制(2KB)
url?xxx=yyy&aaa=bbb
2.post請求
向別人提交數據
eg:用戶注冊登錄填寫完身份數據之后提交
post請求有請求體
post請求也可以攜帶數據 並且大小沒有限制 在請求體中
form表單重要參數
<form action="" method="post">
</form>
action # 控制數據提交的地址
1.寫全路徑 https://www.baidu.com
2.寫后綴(ip和端口自動補全當前服務器) /index/
3.不寫 提交給當前頁面所在的地址
method # 控制數據提交的方式
get form表單默認是get請求
post
"""
注意使用django前期在提交post請求之前需要去配置文件中注釋掉一行代碼
MIDDLEWARE = [
# 'django.middleware.csrf.CsrfViewMiddleware',
]
"""
requests對象方法
request.method # 獲取請求方式名(純大寫的字符串)
request.POST # 獲取post請求提交的普通數據(文件無法獲取)
request.POST.get() # 默認只會取列表最后一個元素
request.POST.getlist() # 獲取所有元素
request.GET # 獲取get請求url問號后面的數據
request.GET.get()
request.GET.getlist()
def login(request):
if request.method == 'POST':
username = request.POST.get('username') # 默認只會取列表最后一個元素
password = request.POST.get('password')
if username == 'jason' and password == '123':
return HttpResponse('OK')
else:
return HttpResponse('用戶名或密碼錯誤')
return render(request, 'login.html')
pycharm鏈接MySQL
需要借助pymysql模塊
django鏈接MySQL
# 第一步配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'db4_3',
'USER':'root',
'PORT':3306,
'HOST':'127.0.0.1',
'PASSWORD':'123',
'CHARSET':'utf8'
}
}
# 第二步配置(3.6及以下解釋器 需要額外的配置)
import pymysql
pymysql.install_as_MySQLdb()
'''只要是__init__文件即可 項目的 應用的都可以'''
簡易登錄頁面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
{% load static %}
<link rel="stylesheet" href="{% static 'bootstrap-3.4.1-dist/css/bootstrap.min.css' %}">
<script src="{% static 'bootstrap-3.4.1-dist/js/bootstrap.min.js' %}"></script>
</head>
<body>
<div class="container">
<div class="row">
<h1 class="text-center">登錄界面</h1>
<div class="clo-md-8 col-md-offset-2">
<form action="" method="post">
<p>username:
<input type="text" class="form-control" name="username">
</p>
<p>password:
<input type="password" class="form-control" name="password">
</p>
<input type="submit" class = "btn btn-success btn-block" value="登錄">
</form>
</div>
</div>
</div>
</body>
</html>
總結
1.利用pycharm創建一個django項目和app
python3 manage.py startapp app01(命令行創建)
# 注:新創建的app需要添加到配置文件(insert)
也可以在創建django項目是自動創建一個app(一個app相當於一個功能)
2.新增一個login方法
在url.py和views.py文件添加對應關系
"定義函數時要記得添加形參request"
小白必會三板斧
return Httpresponse() # 返回字符
return render(request,'html文件') # 返回html界面
可以在后面以字典形式添加其他參數(無需借助jinja2模塊)
html文件采用{{}}形式接收,同時支持模塊語法
return redirect() # 重定向,可以轉到其他界面
return redirect('http://www.baidu.com') 完整格式
return redirect('/admin') 會自動將本界面ip+port拼接
3.編寫html文件
class='containter'
class='row'
h1:text-center
class='col-md-8 col-md-offset-2'
form表單
參數:
input標簽 class='form-contol' # 與用戶交互
submit標簽 btn btn-success btn-block
4.靜態文件
新增一個文件夾存放靜態文件static
可以按功能分為css文件、js文件等等
# 解決無法識別導入html文件的css、js文件,原因是我們只能訪問在url有對應關系的
對ststic文件夾開放接口
打開setting配置文件,找到STSTIC = '/static/'
在底下添加
STATICFILE_DIRS = [
os.path.join(BASIC_DIR,'static')
]
# 我們將ststic文件夾底下的文件添加到配置,只要是以/static/開頭且在ststic文件夾下的路徑都能夠訪問
# 接口前綴動態匹配
固定搭配
{% load ststic %}
{% static '' %}
在html文件在導入靜態文件時使用
{% load static %}
<link rel="stylesheet" href="{% static 'bootstrap-3.4.1-dist/css/bootstrap.min.css' %}">
<script src="{% static 'bootstrap-3.4.1-dist/js/bootstrap.min.js' %}"></script>
5.form表單重要參數
<form action="" method="post">
</form>
action # 控制數據提交的地址
1.寫全路徑 https://www.baidu.com
2.寫后綴(ip和端口自動補全當前服務器) /index/
3.不寫 提交給當前頁面所在的地址
method # 控制數據提交的方式
get form表單默認是get請求
post
6.獲取提交方式
request.method # 根據提交方式返回不同的界面
7.獲取提交的普通數據(不支持文件)