做網(wǎng)站怎么選云主機(jī)免費(fèi)制作自己的網(wǎng)頁
【1】三板斧(3個(gè)方法)的使用
-
Httpresponse()
- 括號(hào)內(nèi)寫什么字符串,返回的就是什么字符串
- 返回的是字符串
-
render(request,' 靜態(tài)文件 ')
- request是固定的
- 靜態(tài)文件是寫在templates文件夾里面的,如,HTML文件
-
redirect(' 重定向的地址 ')
- 重定向的地址:就是要跳轉(zhuǎn)的網(wǎng)頁地址。如:http://www.baidu.com
這3個(gè)方法是內(nèi)置的需要導(dǎo)入,具體看如下圖片
def index(request):print('request')# return HttpResponse("request") # 它返回的是字符串# return render(request, 'index.html') # 加載HTML頁面的# return redirect('http://www.baidu.com') # 加載HTML頁面的return redirect('/home/') # 重定向的
?
【2】settings.py(Django全局配置文件的介紹)
"""
Django settings for myseconddjango project.Generated by 'django-admin startproject' using Django 2.1.For more information on this file, see
https://docs.djangoproject.com/en/2.1/topics/settings/For the full list of settings and their values, see
https://docs.djangoproject.com/en/2.1/ref/settings/
"""import os# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
#用于綁定項(xiàng)目文件位置的絕對(duì)路徑,所有文件夾都依賴于此路徑(django項(xiàng)目的根路徑)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/2.1/howto/deployment/checklist/# SECURITY WARNING: keep the secret key used in production secret!
# 安全警告:對(duì)生產(chǎn)中使用的安全密鑰(也可以說是對(duì)密碼加密使用的鹽)
SECRET_KEY = 'rah+wlz=0#)_g=@-n8@gko(0yh*%e1h*1rmr5=!ccpd@df%3oc'# SECURITY WARNING: don't run with debug turned on in production!
# DEBUG項(xiàng)目的啟動(dòng)模式:
# 1.True:調(diào)試模式
# 檢測(cè)代碼改動(dòng)后,立即重啟服務(wù)
# 顯示報(bào)錯(cuò)頁面,便于查找錯(cuò)誤
# 2.False:正式啟動(dòng)模式或者上線模式
# 不顯示錯(cuò)誤信息,改為False時(shí),需要指定ALLOWED_HOSTS來過濾一些錯(cuò)誤的請(qǐng)求DEBUG = TrueALLOWED_HOSTS = []
#[]空列表,表示只有請(qǐng)求頭中host為127.0.0.1,localhost能訪問本項(xiàng)目,-DEBUG=True時(shí)有效
#['*'],表示任何請(qǐng)求頭的host都能訪問當(dāng)前項(xiàng)目
#['192.168.1.3','127.0.0.1'],表示只有當(dāng)前兩個(gè)host的值才能訪問當(dāng)前項(xiàng)目# Application definition#注冊(cè)Django應(yīng)用
INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','app02.apps.App02Config',
]#注冊(cè)中間件
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主路由的位置
ROOT_URLCONF = 'myseconddjango.urls'# 指定模板配置信息
TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates','DIRS': [os.path.join(BASE_DIR,'templates')],'APP_DIRS': True,'OPTIONS': {'context_processors': ['django.template.context_processors.debug','django.template.context_processors.request','django.contrib.auth.context_processors.auth','django.contrib.messages.context_processors.messages',],},},
]# 正式啟動(dòng)的時(shí)候會(huì)用
WSGI_APPLICATION = 'myseconddjango.wsgi.application'# Database
# https://docs.djangoproject.com/en/2.1/ref/settings/#databases# 數(shù)據(jù)庫配置
DATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3','NAME': os.path.join(BASE_DIR, 'db.sqlite3'),}
}# Password validation
# https://docs.djangoproject.com/en/2.1/ref/settings/#auth-password-validatorsAUTH_PASSWORD_VALIDATORS = [{'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',},{'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',},{'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',},{'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',},
]# Internationalization
# https://docs.djangoproject.com/en/2.1/topics/i18n/# 語言信息配置
# LANGUAGE_CODE = 'en-us' # 英文
LANGUAGE_CODE='zh-hans' # 中文# 時(shí)區(qū)設(shè)置
# TIME_ZONE = 'UTC' # 世界標(biāo)準(zhǔn)時(shí)區(qū)
TIME_ZONE = 'Asia/Shanghai' # 中國(guó)時(shí)區(qū)USE_I18N = TrueUSE_L10N = TrueUSE_TZ = True# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.1/howto/static-files/# 這個(gè)配置是訪問靜態(tài)文件的令牌
STATIC_URL = '/static/'
【3】靜態(tài)文件的配置
? ? ? ? ? ? ? ?【3.1】 什么是靜態(tài)文件?
? ? ? ? 靜態(tài)文件:能直接拿來使用的都是靜態(tài)文件
????????
? ? ? ? 例如:類似HTML文件,類似CSS文件,類似js文件,圖片,第三方的前端框架(jQuery,bootstrap等)
?
靜態(tài)文件一般寫在static文件夾中,但這個(gè)文件夾Django項(xiàng)目默認(rèn)情況下沒有,因此我們需要手動(dòng)創(chuàng)建。靜態(tài)的HTML文件一般存放在templates文件夾中
? ? ? ? ? ? ? ? 【3.2】django地址問題
? ? ? ? 向django項(xiàng)目中導(dǎo)入static靜態(tài)文件后,會(huì)出現(xiàn)找不到文件地址的情況。
? ? ? ?原因是:在Django中沒有開設(shè)這樣一個(gè)地址。
?
? ? ? ? 解決方法:Django自動(dòng)幫我們加。
????????????????在Django的全局配置文件settings.py中添加一個(gè):
?STATICFILES_DIRS?= [os.path.join(BASE_DIR,' static ')]
????????????????????????static是static文件夾的路徑? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
????????
? ? ? ? ? ? ? ? 【3.3】動(dòng)態(tài)解析
? ? ? ? 在settings.py這個(gè)文件中有:STATIC_URL = ' /static/ '
????????
? ? ? ? STATIC_URL = ' /static/ '? ?是訪問靜態(tài)文件的令牌,沒有去訪問靜態(tài)文件必要要有這個(gè)令牌,沒有這個(gè)令牌,直接拒絕訪問
?
{%? %}? ? ? ? 一般寫跟邏輯相關(guān)的
{{? }}? ? ? ? 一般寫跟變量相關(guān)的
?
動(dòng)態(tài)解析就需要用到{%? %}
????????
????????
{% load static %}<script src="{% static 'js/jquery_3.7.1_jquery.min.js' %}"></script> <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>''' {% load static %} ------ load是固定寫法,static是令牌<script src="{% static 'js/jquery_3.7.1_jquery.min.js' %}"></script>static是令牌,后面是文件地址'''
【4】request對(duì)象方法
? ? ? ? 以登錄系統(tǒng)為例子
-
request.method
- 查看請(qǐng)求方式是POST還是GET
-
request.POST
- 獲取以post請(qǐng)求方式提交的表單數(shù)據(jù)
-
request.POST.get('username')
- 獲取以post請(qǐng)求方式提交的指定表單數(shù)據(jù)
- 使用get方法默認(rèn)是拿到最后一個(gè)值
-
request.POST.getlist('hobby')
- 獲取以post請(qǐng)求方式提交的指定表單數(shù)據(jù)中的多個(gè)值
-
request.GET
- 獲取以get請(qǐng)求方式,網(wǎng)址欄上的參數(shù)
-
request.GET.get('a')
- 獲取以get請(qǐng)求方式,網(wǎng)址欄上的指定參數(shù)的值
-
request.GET.getlist('C')
- 獲取以get請(qǐng)求方式,網(wǎng)址欄上的指定參數(shù)的值的多個(gè)值
以上方法都需要用print()打印才能看到效果
?
例:print(request.POST)
【5】django鏈接數(shù)據(jù)庫
在settings.py中鏈接數(shù)據(jù)庫
? ? ? ? 將原先的default注釋掉,然后新寫一個(gè)default
????????
# 數(shù)據(jù)庫配置 DATABASES = { # 'default': { # 'ENGINE': 'django.db.backends.sqlite3', # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), # }'default': {'ENGINE': 'django.db.backends.sqlite3','HOST': '127.0.0.1','PORT': 3306,'USER': 'root','PASSWORD': '123','NAME': 'db1','CHARSET': 'UTF8', } }
注意:
? ? ? ? 配置完鏈接數(shù)據(jù)的代碼之后,Django默認(rèn)啟動(dòng)不起來。原因:內(nèi)部使用的鏈接模塊用的是mysqldb,我們換個(gè)模塊,使用pymysql模塊
?
如何更換成pymysql:
? ? ? ? 在任意的__init__.py這個(gè)文件中添加如下兩行代碼:
?import pymysqlpymysql.install_as_MySQLdb()
【6】orm介紹
orm:對(duì)象映射模型
?
映射對(duì)應(yīng)關(guān)系:
????面向?qū)ο? ? ? ?》》》》? ? ? ? ? ? 數(shù)據(jù)庫
? ? ? ? 類名? ? ? ? ? 》》》》? ? ? ? ? ? ? 表名
? ? ? ? 對(duì)象? ? ? ? ? 》》》》? ? ? ? ? 一條記錄
? ? ? ? 屬性? ? ? ? ? 》》》》? ? ? ? ? 一個(gè)字段
?
在Django中操作數(shù)據(jù)庫不用寫原生的SQL語句,而是使用面向?qū)ο蟮恼Z法和一些方法來操作數(shù)據(jù)庫。?
?
這個(gè)方法的缺點(diǎn):
? ? ? ? 代碼的封裝程度太高,導(dǎo)致執(zhí)行效率下降
?
?
書寫SQL語句的位置:models.py這個(gè)文件
?
?
在models.py中寫完后,需要在Terminal終端中做數(shù)據(jù)庫遷移命令
?
數(shù)據(jù)庫遷移命令:? ? ? ?
python36? manage.py makemigrations? ? ? ? # 生成遷移的記錄python36? manage.py migrate? ? ? ? #? 這句話是真正操作數(shù)據(jù)庫,生成表
?
只要是對(duì)models.py里面的代碼做了修改或其它改動(dòng),都需要重新執(zhí)行數(shù)據(jù)庫遷移命令