Django初體驗

前言

利用Django 框架搭建一個簡易版本的登陸註冊,修改用戶信息的項目html

在此以前,須要瞭解如下知識點:前端

靜態文件

默認狀況下全部的 html 文件都是放在 templates 文件夾內的。python

什麼是靜態文件

靜態文件就是 網站所使用到的全部提早寫好的css、js、第三方的前端模塊、圖片文件、都叫作靜態文件資源。mysql

默認狀況下網站所用到的靜態文件資源所有都會放到static文件夾下,jquery

Django中須要手動建立這個文件夾,static 文件夾下面還能夠建立其餘的文件夾,將css、js文件區分開來。sql

css   文件夾
js    文件夾
font  文件夾
img   文件夾
Bootstrap

靜態文件的配置

在 mysite settings.py配置文件中添加如下信息:shell

  • STATIC_URL:訪問靜態文件資源的接口後綴
  • STATICFILES_DIRS:靜態文件所在的文件夾的路徑
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.11/howto/static-files/

STATIC_URL = '/static/'     # 訪問靜態文件的接口url路徑後綴,
STATICFILES_DIRS = [        # 靜態文件資源存在的具體文件夾目錄
    os.path.join(BASE_DIR,"static"),    # 將static文件裏的內容暴露給用戶看
    os.path.join(BASE_DIR,"static1"),    # 能夠寫多個
]                           # 這樣客戶端經過url方式能夠訪問你配置的靜態文件資源。

靜態文件動態綁定

咱們在配置好這個靜態文件配置後,須要在html文件中動態使用靜態文件的url路徑,能夠在html中動態綁定,以避免後續靜態文件路徑變更很差擴展。數據庫

咱們以前學過了Bootstrap框架,能夠直接引用過來。django

將bootstrap文件夾放入static文件夾中,html head標籤內引用如下內容。

<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
    {% load static %}
    <link rel="stylesheet" href="{% static 'bootstrap/css/bootstrap.min.css' %}">
    <script src="{% static 'bootstrap/js/bootstrap.min.js' %}"></script>

如今咱們在訪問咱們的html頁面,會看到請求靜態文件的url路徑會變成咱們想要的:,此時咱們看到這個請求後綴是static,若是咱們沒有再urls.py中配置這個對應關係,咱們是沒辦法訪問到的,這個爲何訪問的到呢?這是由於讓django幫咱們作了這個操做,你就不用操心了哈~。

Request URL: http://127.0.0.1:8000/static/bootstrap/css/bootstrap.min.css

注意:

若是你的Django項目中 DEBUG 模式設置爲False,那麼靜態文件會報404,修改成True便可正常訪問(200)

form表單回顧

get請求

form表單默認是get請求。

那麼咱們也能夠指定他的請求方式是post

或者get請求也能夠攜帶一些參數一塊兒發送到後端:

格式:路徑後綴/?xxx=xxx&yyy=xxx

http://127.0.0.1:8000/login/?user=qinyj&pwd=123

那麼問題就來了,get請求攜帶參數咱們均可以看到,它的參數都是在瀏覽器url上直接看獲得的,那麼咱們總結如下:

  1. get請求攜帶的數據不安全。
  2. get請求攜帶的數據大小有限制,目前說的get請求長度有限制,是特定的瀏覽器及服務器對它的限制。
  3. 一般get請求若是要攜帶參數的話只會攜帶一些不是很重要的數據。

action參數

不寫,默認朝當前地址提交

只寫後綴的形式:index/

寫全路徑的形式:https://www.baidu.com

前期若是咱們在朝後端提交post請求的時候,會出現403的狀況,須要註釋掉配置文件中一行內容。

'django.middleware.csrf.CsrfViewMiddleware'

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    # 'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

在django中後端的視圖函數,不管是發的get請求仍是post請求,都會執行視圖函數,默認處理的是get請求。

request方法初識

咱們在視圖函數中定義的全部函數都必須有返回值,而且返回值都是HTTPResponse對象

如何在python後端判斷當前的請求方式是什麼?

這裏須要瞭解request 的一些方法

  • request.method:獲取請求方式,返回的是純大寫的字符串。

  • request.GET:獲取用戶提交的get請求數據,返回的是列表套對象。

    request.GET.get():獲取列表中的最後一個

    request.GET.getlist():獲取列表類型的數據

  • request.POST:獲取用戶提交的post請求數據

    request.POST.get():獲取列表中的最後一個

    request.POST.getlist():獲取列表類型的數據

Django鏈接MySQL數據庫

配置文件配置

須要在settings.py配置文件中配置

DATABASES = {
    'default': {
        'ENGINE':'django.db.backends.mysql',
        'NAME':'day50',
        'USER':'root',
        'PASSWORD':'123',
        'HOST':'192.168.32.130',
        'PORT':3306,
    }
}

告訴Django使用pymysql

在項目名/應用名下的一個__init__.py中寫

import pymysql
pymysql.install_as_MySQLdb()

Django中操做ORM

ORM簡介

ORM 對象關係映射

python中         數據庫
類名      -->     表名
對象      -->     數據
對象.屬性  -->  字段對應的值

爲何使用ORM

可以讓不會數據庫操做的人也可以簡單方便的去操做數據庫

ORM的缺點

封裝程度過高,有時候會出現查詢效率偏低的問題。

編寫models.py

咱們在寫django項目的時候,最好一個django項目就對應一個數據庫。

from django.db import models

# Create your models here.
# 必須是models.Model的子類
class User(models.Model):
    # 若是不寫主鍵,默認會添加一個名爲id的主鍵,而且這個主鍵是自增id
    name = models.CharField(max_length=32)
    pwd = models.IntegerField()

數據庫遷移命令

編寫完models.py以後,咱們要把表建立在MySQL數據庫中,須要用到兩條命令

python3 manage.py makemigrations記錄將數據的修改

python3 manage.py migrate真正同步到數據庫中

只要修改了models.py中與數據庫相關的代碼,就必須從新執行上面兩條命令。

Django中模型表字段的增刪改查

對數據庫中字段的修改,直接修改字段便可

若是是新增數據庫字段,要注意兩點:

  • 要給新的字段設置一個默認值

    email = models.EmailField(default="qinyj@qq.com")

  • 或者設置新的字段爲空

    phone = models.BigIntergerField(null=True)

若是要刪除數據字段,直接註釋對應的字段便可,注意刪除字段也會把數據刪除

最後的最後,記得要執行數據庫的兩條遷移命令

1.python3 manage.py makemigrations  # 將數據庫的修改 記錄到小本本上(migrations文件內)
    
2.python3 manage.py migrate         # 將修改操做真正的同步到數據庫中

Django中模型表數據的增刪改查

增:  models.User.objects.create
user_obj = models.User.objects.create(username=username,password=password)
       print(user_obj,user_obj.username,user_obj.password)
        # create方法會有一個返回值  返回值就是當前被建立的對象自己
        
刪:
models.User.objects.filter(id=delete_id).delete()
"""
批量操做  會將filter查詢出來的列表中全部的對象所有刪除
"""

改:
models.User.objects.filter(id=edit_id).update(username=username,password=password)
"""
批量操做  會將filter查詢出來的列表中全部的對象所有更新
"""
        
查:
data = models.User.objects.filter(username=username)  # <QuerySet [<User: User object>]>
"""
filter返回的結果是一個"列表",裏面纔是真正數據對象
filer括號內能夠放多個關鍵字參數 這多個關鍵字參數在查詢的時候 是and關係
"""
user_list = models.User.objects.all()  # models.User.objects.filter()
"""
結果是一個"列表" 裏面是一個個的數據對象
"""
相關文章
相關標籤/搜索