request對象的方法, pymysql, django orm

[TOC]css

靜態文件配置

  • 視圖函數都必須有返回值, 而且返回值都是HttpResponse對象html

  • 默認狀況下, 全部的html文件都是放在templates文件夾內前端

  • 用戶在瀏覽器中輸入網址能訪問到對應的資源, 前提是後端提早開設了該資源的訪問接口python

  • 靜態文件: 網站所使用到的提早寫好的css, js, 第三方前端模塊, 圖片等都叫作靜態資源mysql

    默認狀況下, 網站所用到的靜態文件所有會放在static文件夾下,sql

    一般狀況下會在static文件夾內再創建文件夾對不一樣靜態文件加以區分,數據庫

    例如: css文件夾, js文件夾, font文件夾等,django

    django中, 須要本身手動建立靜態文件存放的文件夾bootstrap

  • 禁止瀏覽器使用緩存: f12-->...-->Settings-->Network-->Disable cache後端

STATIC_URL = '/static/'  # 訪問靜態資源文件接口前綴
# STATIC_URL = '/xxx/'
STATICFILES_DIRS = [  # 靜態資源所在文件夾路徑
    os.path.join(BASE_DIR, 'static'),  # 將static文件裏的全部資源上線到服務器
    os.path.join(BASE_DIR, 'static1')
]

# <script src="/xxx/bootstrap-3.3.7-dist/js/bootstrap.min.js"></script>
  • 動態綁定靜態文件, 映射關係: 多<==>一<==>一

    多: 動態變化的url後綴, 一: 文件夾路徑, 一: 模板語法內置的static變量

    {% load static %}
        <script src="{% static 'jQuery.3.4.1.js' %}"></script>
        <link rel="stylesheet" href="{% static 'bootstrap-3.3.7-dist/css/bootstrap.min.css' %}">
      <script src="{% static 'bootstrap-3.3.7-dist/js/bootstrap.min.js' %}"></script>

request對象的方法

form表單默認是get請求

  • get請求也可以攜帶參數

    • http://127.0.0.1:8000/login/?username=cql&password=123
    • 格式: url?xxx=xxx&yyy=yyy
  • get請求攜帶參數特色:

    1. 攜帶數據不安全
    2. 攜帶的數據大小有限制
    3. 一般只會攜帶一些不是很重要的數據
  • 在朝後端提交post請求出現403時, 須要去配置文件中註釋掉一行內容,

    MIDDLEWARE-->'django.middleware.csrf.CsrfViewMiddleware', 中間件

  • 瀏覽器不管發get請求仍是post請求, 都會執行django後端的視圖函數

    • get請求, 獲取login頁面
    • post請求, 提交數據, 而後後端作校驗
  • 獲取前端請求方式: request.method, 大寫的字符串

  • 獲取用戶提交的post請求的數據: request.POST, 至關於字典

    '''
        print(request.POST)  # <QueryDict: {'username': ['cql'], 'password': ['123']}>
        username = request.POST.get('username')
        password = request.POST.get('password')
        print(username, type(username))  # cql <class 'str'>
        print(password, type(password))  # 123 <class 'str'>
    
        username_lt = request.POST.getlist('username')
        print(username_lt, type(username_lt))  # ['cql'] <class 'list'>
    
        用get取值, 默認只取列表最後一個元素, 若是想獲取列表, 需使用getlist
    
    '''
  • 獲取用戶提交的get請求的數據: request.GET, 更細粒度獲取數據: request.GET.get, request.GET.getlist

django鏈接數據庫

文件配置

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',  # 指定數據庫類型
        'NAME': 'django',  # 指定庫的名字
        'USER': 'root',  # 鍵必須是全大寫
        'PASSWORD': 'Cql123456',
        'HOST': '127.0.1.1',
        'PORT': 3306,
        'CHARSET': 'utf8'
    }
}

設置不用默認的mysqldb鏈接, 而是用pymysql鏈接

在項目名或者在應用名下的__inint__中書寫代碼指定

import pymysql

pymysql.install_as_MySQLdb()

django orm

orm優勢: 可以讓不會數據庫操做的人也可以簡單方便的操做數據庫

orm缺點: 封裝程度過高, 會出現查詢效率低的問題

django中如何操做orm

  • 去models.py中書寫模型類

    from django.db import models
    
    
    class User(models.Model):
        id = models.AutoField(primary_key=True)  # 當不指定主鍵時, django會自動建立一個名爲id的主鍵字段
        username = models.CharField(max_length=32)  # CharField字段必須指定max_length參數 
        password = models.CharField(max_length=64)
  • 一個django項目對應一個數據庫

  • 數據庫遷移(同步)命令

    • python manage.py makemigrations, 將數據庫的修改記錄到app中的migrations文件夾內,相似於日誌
    • python manage.py migrate, 將修改操做真正同步到數據庫中
    • 自動加前綴區分(app01_user), 第一次自動建立默認功能表
    • 只要修改了models裏面和數據庫相關的代碼, 就必須從新執行上面兩條命令

字段的增刪改查

  • 增長新字段

    '''
    email = models.EmailField()
    
    python manage.py makemigrations
    報錯: without a default  # 未設置默認值
    解決:	
    	1) Provide a one-off default now  # 在cmd中直接提供默認值
    	2) Quit, and let me add a default in models.py  
    	# 在models對應的表類中設置默認值或容許爲空, email = models.EmailFieldnull=True)
    
    '''
  • 刪除字段: 在models對應的表類中直接註釋掉對應的字段代碼, 而後執行數據庫遷移命令(謹慎使用)

完善登陸功能

django orm 查詢數據庫中數據

def login(request):
    if request.method == "POST":
        username = request.POST.get('username')
        password = request.POST.get('password')

        # 數據庫查詢數據, 結果爲列表套數據對象, 能夠用多個and關係的關鍵字參數查詢
        data = models.User.objects.filter(username=username)

        if not data:
            return HttpResponse('當前用戶不存在!')

        user_obj = data[0]
        if user_obj.password == password:
            return HttpResponse('登陸成功!')
        return HttpResponse('密碼錯誤!')

    return render(request, 'login.html')

展現 + 新增用戶功能

django orm 新增數據庫中數據

'''
1. 查詢數據庫中的全部數據展現到前端頁面
2. 前端頁面上針對不一樣的數據都有編輯和刪除按鈕
3. 點擊對應的按鈕能完成對應的操做
'''  
def show_user_lt(request):
    user_lt = models.User.objects.all()  # 等價於: models.User.objects.filter()
    return render(request, 'show_user_lt.html', {'userLt': user_lt})


def add_user(request):
    # 草稿: 給用戶返回一個添加頁面, 而後用戶輸入提交, 後端獲取數據, 寫入數據庫, 並給重定向到數據展現頁

    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        
        # create新增數據方法返回值爲當前被建立的對象自己
        user_obj = models.User.objects.create(username=username, password=password)  
        # print(user_obj, user_obj.username, user_obj.password)

        return redirect('/show_user_lt/')  # 添加成功後跳轉到數據展現頁

    return render(request, 'add_user.html')


class User(models.Model):
    username = models.CharField(max_length=32)
    
    # 跟數據庫沒有關係, 因此不須要執行數據庫遷移命令
    def __str__(self):
        return self.username  # 該返回值必須是字符串類型

編輯 + 刪除用戶功能

模板語法的註釋

{# {% endfor %}#}, 不會展現到前端, html的註釋會展現到前端

django orm 修改數據庫中數據

def edit_user(request):
    """
    草稿:
        返回一個編輯頁面, 該頁面上應該展現想要編輯的用戶信息
        利用get請求攜帶參數的方式, 獲取用戶想要編輯的數據的id值
        將用戶想要編輯的數據查詢出來, 展現到編輯頁面上, 供用戶修改
    """
    edit_id = request.GET.get('edit_id')
    edit_obj = models.User.objects.filter(id=edit_id).first()  # 不推薦索引取值

    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')

        # 修改數據方法: 批量操做, 會將filter查詢出來的列表中的全部對象所有更新
        models.User.objects.filter(id=edit_id).update(username=username, password=password)

        return redirect('/show_user_lt/')

    return render(request, 'edit_user.html', {'edit_obj': edit_obj})
<!--在show_user_lt頁面中經過模板語法爲每條數據的編輯按鈕設置不一樣的get請求攜帶參數-->
<tbody>
    {% for user_obj in userLt %}
    <tr>
        <td>
            <a href="/edit_user/?edit_id={{ user_obj.id }}" class="btn">編輯</a>
        </td>
    </tr>
    {% endfor %}
</tbody>

django orm 修改數據庫中數據

def delete_user(request):
    delete_id = request.GET.get('delete_id')

    # 刪除數據方法: 批量操做, 會將filter查詢出來的列表中的全部對象所有刪除
    models.User.objects.filter(id=delete_id).delete()

    return redirect('/show_user_lt/')
相關文章
相關標籤/搜索