django初識

靜態文件

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

什麼是靜態文件

網站所使用的提早寫的css、js 第三方的前端模塊、圖片都叫作靜態資源前端

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

一般狀況下 在static文件夾內部還會再建其餘文件夾 這是爲了更加方便地管理文件,在django中 須要你本身手動建立靜態文件存放的文件夾mysql

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

注意點:視圖函數都必須有返回值,而且返回值都是HttpResponse對象sql

靜態文件的配置

django後端若是想要暴露後端資源,必須去urls裏面開設對應的資源接口數據庫

在項目文件夾下settings.py配置:django

STATIC_URL = '/static/'  # 訪問靜態文件資源接口前綴

# 手動開設靜態文件訪問資源
STATICFILES_DIRS = [     # 靜態資源所在的文件所i在文件夾路徑
    os.path.join(BASE_DIR, 'static'),  # 將static裏面的全部資源暴露給用戶
    os.path.join(BASE_DIR, 'static1')   # static找不到會往下找,逐層找
]

靜態文件動態綁定

{% load static %}
    <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>

注意事項

form表單默認是get請求,get請求也可以攜帶參數
格式:http://127.0.0.1:8000/login/?username=cwz&password=123bootstrap

特色:後端

  • 攜帶的數據不安全
  • 攜帶的數據大小有限制
  • 一般只會攜帶一些不是很重要的數據

前期在朝後端提交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',
]

request方法初識

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

  • get請求指向拿到login頁面
  • post請求想提交數據,而後後端作校驗

判斷當前請求方式:

  • 利用request.method 拿到的字符串大寫的請求方式
def login(request):
    # print('哈哈哈')
    # print(request.method)
    # print(type(request.method))
    if request.method == 'POST':
        return HttpResponse('收到了')
    return render(request, 'login.html')
  1. request.method 獲取請求方式,獲得純大寫的字符串 GET POST

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

    request.POST.get('username')    # 默認只取列表最後一個元素
    request.POST.getlist('username')   # 獲取列表
  3. request.GET 獲取用戶提交的get請求數據

    request.GET.get()  # 默認只會獲取列表最後一個元素
    request.GET.getlist()  # 若是你想獲取列表 用getlist()

pycharm鏈接數據庫

pycharm也能夠充當MySQL的客戶端

django鏈接MySQL

django默認的數據庫是sqlite3,咱們改成MySQL,須要兩步操做

  • 在配置文件中改數據庫的配置:
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',  # 指定數據庫
        'NAME': 'test',  # 指定庫的名字
        'HOST': '127.0.0.1',   # 要注意鍵必須大寫
        'PORT': 3306,
        'USER': 'root',
        'PASSWORD': '123',
        'CHARSET': 'utf8'
    }
}
  • 主動告訴django 不要用默認的mysqldb鏈接 而是用pymysql
# 你能夠在項目名下的__init__.py中書寫
# 也能夠在應用名下的__init__.py中書寫
import pymysql
pymysql.install_as_MySQLdb()

django ORM簡介

ORM 對象關係映射

對象 數據
對象.屬性 字段對應的值

爲何使用ORM

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

缺點:

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

django中操做ORM

去應用下的models.py中寫數據模型類

class User(models.Model):
    # id = models.AutoField(primary_key=True)
    # django當你不指定主鍵的時候,會自動幫你建立一個名爲id字段,並做爲主鍵
    # 若是你本身指定了主鍵 django就不會再幫你建立

    # 對應的是varchar(32)  django中默認沒有char字段,但支持用戶自定義
    username = models.CharField(max_length=32)
    password = models.IntegerField()

數據庫遷移命名(同步)

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

注意:

- 上面兩條命令必須是成雙成對出現
- 只要修改了models裏面跟數據庫相關的代碼 你就必須從新執行上面兩條命令

模型表字段的增刪改查

字段的修改

直接修改代碼 而後執行數據庫遷移命令便可

新增字段,

  • 方式1 設置默認值

    email = models.EmailField(default='123@qq.com')
  • 方式2 容許字段爲空

    phone = models.BigIntegerField(null=True)
  • 方式3 直接在提示中給默認值

字段的刪除

直接註釋掉對應的字段,而後執行數據庫遷移命令(謹慎使用)

模型表數據的增刪改查

data = models.User.objects.filter(username=username)  # <QuerySet [<User: User object>]>
# 至關於 select * from user where username='neo'


"""
filter返回的結果是一個"列表",裏面纔是真正數據對象
filer括號內能夠放多個關鍵字參數 這多個關鍵字參數在查詢的時候 是and關係
"""


user_list = models.User.objects.all()
"""
結果是一個"列表",裏面是一個個的數據對象
"""

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=edit_id).update(username=username,password=password)
"""
批量操做  會將filter查詢出來的列表中全部的對象所有更新
"""

models.User.objects.filter(id=delete_id).delete()
"""
批量操做  會將filter查詢出來的列表中全部的對象所有刪除
"""
相關文章
相關標籤/搜索