1. 程式人生 > 其它 >三板斧、靜態檔案配置、request、連結、orm操作

三板斧、靜態檔案配置、request、連結、orm操作

django小白必會三板斧

靜態檔案及相關配置

request物件方法

pycharm連結MYSQL

django連結MYSQL

Django orm操作

django小白必會三板斧

# 啟動django專案之後,我們如何新增更多的功能
  只要先新增功能,就去urls.py 和 view.py中新增對應和功能函式
    
# django自帶重啟功能
   當識別到專案中程式碼有變化之後,間隔一段時間之後就會自動重啟,但會有點慢
  
# 與瀏覽器打交道的檢視函式都應該有返回值
HttpResponse
    主要用於返回字串型別的資料
    return HttpResponse
render
   主要用於返回html檔案,並且支援模板語法(django語法)
    return render(request, 'index檔案.html', {'name': 'gavin'})
redirect
    主要用於重定向,括號內的可以寫其他網站的全稱,也可以寫自己網站的字尾

靜態檔案及相關配置

  • 登入功能
"""
我們之所以可以在瀏覽器位址列中輸入不同的路由訪問到不同的資源  是因為我們在後端框架中提前開設了相應的訪問介面所以使用者才能訪問
言外之意就是我們沒有開設介面 那麼肯定訪問不到
"""
# 1.開設介面返回登入介面
# 2.登入介面需要使用bootstrap並且還需要自己編寫css和js
	靜態檔案
# 頁面需要獲取前端使用者資料並傳遞給後端
form表單
 action引數: 控制資料的提交地址
 method引數: 控制請求的提交方式
 
# 訪問登入頁面
靜態檔案全部顯示資源不存在
http://127.0.0.1:8000/static/bootstrap-3.3.7-dist/css/bootstrap.min.css
就是因為我們沒有開設驚濤資源的訪問埠
# 開設靜態資源的訪問介面
  理論上是自己去路由層開設介面資源,但是由於靜態檔案資源使用頻率很高
    因為只要是一個web專案肯定需要開設,使用提供了靜態資源的配置檔案,只要填寫固定的配置就可以開設資源介面
    settings.py檔案中,最下方
    # 靜態檔案資源訪問介面固定配置
    STATICFILES_DIRS = [
        os.path.join(BASE_DIR, 'static')
    ]
    # html頁面路徑
    	/static/mycss.css
        
# 配置檔案的兩大疑惑
STATIC_URL = '/static/'  # 作用
STATICFILES_DIRS = []  # 為什麼是列表(用來儲存多個元素的)
  """
以該地址為例:/static/bootstrap-3.3.7-dist/css/bootstrap.min.css
    /static/是介面字首 表示具備訪問靜態檔案資源的許可權
    具備了許可權之後會拿著介面字首後面的檔案路徑去列表中每個資料夾中查詢
        bootstrap-3.3.7-dist/css/bootstrap.min.css
    找到一個就結束
        比如 static和static1裡面都有a.txt 那麼只會拿到static中的
	"""
    
# 介面字首動態繫結
如果templates中有很多html檔案並且都需要引入靜態資源
當你把介面的字首修改之後頁面就無法載入資源,使用我們進行動態的介面字首繫結
{% load static %}
<link rel="stylesheet" href="{% static 'bootstrap-3.3.7-dist/css/bootstrap.min.css' %}">
  • 靜態檔案

# 編寫完成後不會經常使用或被修改的與html頁面相關的檔案
css檔案、js檔案、圖片檔案、第三方框架檔案(bootstarp)
這些都可以稱之為靜態檔案
我們在django中靜態檔案單獨開設一個資料夾儲存,預設為static資料夾
在這個資料夾內還可以根據功能的不同繼續劃分不同的檔案
css資料夾、js資料夾、img資料夾 、others資料夾

request物件方法

"""
 提交post請求,預設時會報403
   前期我們直接去配置檔案中註釋一行即可
MIDDLEWARE = [
 'django.middleware.csrf.CsrfViewMiddleware',
		]
註釋這一行
"""
1、get請求和post請求都會觸發同一個檢視函式login的執行
  # 如何針對不同的請求執行不同的程式碼
    get請求返回一個登入頁面
    post請求獲取使用者資料並校驗
   
2、獲取當前請求方式
request.method  返回的是純大寫的請求方法字串
"""
 由於get請求更加常見,post請求其次,所以還可以簡寫
"""
"""預設讓檢視函式處理get請求 ,當為post時走post"""
if request.method == 'POST':
        return HttpResponse('歡迎來到米奇妙妙屋')
return render(request, 'login.html')

3、獲取post請求提交的普通資料
request.POST  # 結果為 <QueryDict: {'username': ['owen'], 'password': ['123']}> 所以我們看成字典處理
# 我們可以根據字典的取值方式拿到值
    print(request.POST.get('hobby'))  # 返回的列表,直接get會自動拿到最後一個值 333
    print(request.POST.getlist('hobby'))  # 先要拿到整個列表使用getlist ['111', '222', '333']
    
4、如何獲取URL後面攜帶的資料
print(request.GET)  #<QueryDict: {'info': ['111']}>
 print(request.GET.get('info'))
 print(request.GET.getlist('city'))
特徵與上述request.POST一致 使用場景也很多
  	https://www.lagou.com/wn/jobs?kd=python&isSchoolJob=1&city=%E4%B8%8A%E6%B5%B7&pn=1

pycharm連結MYSQL

"""
  pycharm也可以充當很多資料庫軟體的客戶端
"""
1、pycharm左上方側邊 database
2、pycharm左下方邊 database
3、這兩個地方都沒有時,我們就需要下載外掛,或者重新安裝一個正常pycharm
   settings
  	plugins
    搜尋database下載apple即可
# 連結資料庫
1、選擇資料庫
2、首次連結需要下載驅動
download drive..
3、測試連結如果不通過,則需要換驅動重新下載使用
Driver:MySQL MySQL for 5.1

django連結MYSQL

"""
 django預設自帶一個sqlite3資料庫,但是功能很少,僅用於本地測試使用
"""
1.預設配置
	DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}
2.修改配置
	DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'lsw03',
        'HOST': '127.0.0.1',
        'PORT': 3306,
        'USER': 'root',
        'PASSWORD': '123456',
    }
# 3、指定模組 django 1.x 獨有的
  在專案同名的資料夾內的__init__.py
  或者應用名的資料夾內的__init__.py
  新增一行固定的程式碼
  	import pymysql
		pymysql.install_as_MySQLdb()      

Django orm操作

  • orm簡介

ORM:物件關係對映
# 特點
 能夠讓不會寫SQL的python程式設計師使用Python語法就可以直接操作mysql
    開發效率等得到提高
    壞處: 封裝了SQL語句,有時候效率不高還需要人為編寫SQL呼叫
        
# 概念
表   ————  類
一行行資料  ————  類產生的一個個物件
資料欄位  ————  物件的一個個屬性
  • orm基本使用
# 如果需要使用ORM 需要去使用應用下的models.py中編寫程式碼
1、編寫類程式碼,建立一個表 
class Users(models.Model):
    uid = models.AutoField(primary_key=True)  # AutoField 在自動建立主鍵  相等於 uid int primary key auto_increment
    name = models.CharField(max_length=32)  # 欄位  等價於name varchar(32)
    pwd = models.IntegerField()  # 相當於 pwd int
    
2、執行資料庫遷移命令 
  # 使用pycharm開啟cmd
  python38 manage.py makemigrations  # 記錄操作
  python38 manage.py migrate  # 將操作遷移到資料庫
"""
	首次執行遷移命令 django還會自動建立一些預設需要使用到的表
  """ 
3、表名的特徵
users      app01_users
由於django支援多個應用 ,所以為了區分不同應用下可能會出現相同的表名 ,所以自動加上了應用的字首,這樣就會在一個人應用裡面出現相同的表名

4、擴充套件
4.1、表的主鍵可以不寫,orm會自動幫你寫一個名為ID的主鍵
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
4.2、每次修改了跟資料局庫相關的Python程式碼,都需要重新執行遷移命令
  針對兩個遷移的命令,可以採用pycharm提示功能編寫
    tools
    run manage.py task
  • 資料的操作
# 增
from app01 import models
user_obj = models.Users.objects.create(name='gavin', pwd='123')
    print(user_obj)  # Users object
    print(user_obj.uid)  # 3
    print(user_obj.name)  # gavin
    print(user_obj.pwd)  # 123

# 查
    res = models.Users.objects.filter(name='owen')
    print(res)  # <QuerySet [<Users: Users object>]>
    print(res[0])  # 物件
    print(res[0].uid)  # 1
    print(res[0].name)  # owen
    print(res[0].pwd)  # 123
    
# 改
models.Users.objects.filter(uid=2).update(name='gavinYYDS')
#  2 | gavinYYDS | 123 |
    
# 刪
models.Users.objects.filter(uid=3).delete()