[TOC]css
自定義登陸功能
建立靜態文件夾(static文件夾)
views.py
中建立的視圖函數,會須要用到一些css樣式和js對象,若是仍是經過CDN加速的方式,從網絡調用,會顯得不安全,當服務器網絡發生故障的時候,會致使css樣式和js對象加載不出來,所以咱們須要將這些靜態文件放到本地存放。html
靜態文件
css文件,js文件,圖片,字體,以及一些第三方的框架(bootstrap,sweetalert, fontawesome)python
靜態文件夾(static)
解耦合,方便維護管理。mysql
針對這些靜態文件,咱們須要爲其建立一個專門的文件夾,這樣能夠顯得不是很雜亂,也能夠統一進行管理,通常咱們會命名爲static
,結構以下:sql
static - css 網站用到的全部css文件 - js 網站用到的全部js文件 - image 網站用到的全部圖片文件 第三方文件
django靜態文件配置
基本配置
在settings.py中修改:數據庫
STATIC_URL = '/static/' # 訪問後端靜態資源的接口前綴 默認狀況下接口前綴名與靜態文件名保持一致 """ <link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.min.css"> 你要想訪問後端的靜態資源 你必須以接口前綴開頭 後面跟上具體的文件路徑 纔可以訪問到對應的資源 當你的接口前綴正確以後 會拿着後面的路徑依次去下面列表中的每個文件夾下查找對應的資源 順序是從上往下依次查找 若是都沒有找到纔會報錯 """ STATICFILES_DIRS = [ os.path.join(BASE_DIR,'static'), # 這裏的static纔是你文件夾的路徑 os.path.join(BASE_DIR,'static1'), os.path.join(BASE_DIR,'static2'), ] # 當static和static1中都有一個a.txt,當在static中查找到以後,就不會再去static1中查找了。
STATIC_URL:訪問後端靜態資源的接口前綴,默認狀況下接口前綴與靜態文件名保持一致django
它的做用相似一個令牌,當想要訪問靜態網頁資源,必須在這裏寫上一個'/static/'
,當識別到link中的href路徑(<link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap. min. css">
)或script的src路徑(<script src="/static/bootstrap-3.3.7-dist/js/bootstrap.min.js"></script>
)以static開頭,django會容許你去STATICFILES_DIRS
列表中存在的全部文件夾下,查找所須要的資源。bootstrap
當路徑的前綴改成XXX,那接口的前綴也須要改成XXX。後端
所以,這裏的static對應的是以static開頭的路徑。安全
靜態資源動態綁定
前面的靜態資源接口,一旦發生改變,就須要去修改html中的導入css和js的前綴路徑,這樣會很麻煩,當html較多時,須要耗費大量的時間去修改,所以產生了一個動態綁定的方法:
{% 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>
當靜態資源接口修改後,css和js的路徑也會隨之改變。
post請求須要修改配置文件
在提交post請求的時候,須要先去配置文件中註釋掉一行:
# 中間件 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', ]
form表單回顧
form表單默認是以get請求提交數據,所提交的數據跟在url後面以?xxx=yyy&zzz=ttt
的形式存在。
http://127.0.0.1:8000/login/?username=admin&password=123
獲取請求方式(request.method
)
爲了減小代碼的層級:通常狀況下視圖函數處理get請求較多因此能夠直接再函數體內先寫get請求對應的邏輯,將其餘請求利用 request. method作出區分
def login(request): if request.method == 'POST': username = request.POST.get('username') password = request.POST.get('password') return httpresponse('收到了') return render(request,'login. html')
request對象方法
request.method
:獲取請求方式,返回GET/POST
request.POST
:獲取符合POST請求攜帶的數據,返回的是一個大字典。(<QueryDict: {'username': ['admin'], 'password': ['123']}>
)
-
request.Post.get('key')
:只會取列表最後一個元素 -
request.POST.getlist('key')
:取出整個列表
request.GET
:獲取符合get請求攜帶數據格式的數據(url?xxx=xxx&ooo=lll
)
request.GET.get('key')
: 只會取列表最後一個元素request.GET.getlist('key')
:取出整個列表
djangoMySQL鏈接★
1.先去配置文件(settings.py)中配置相關參數
# 修改數據庫的配置 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', # 數據庫類別 'NAME': 'day49', # 庫的名字 'HOST': '127.0.0.1', 'PORT': 3306, 'USER': 'root', 'PASSWORD': '123', 'CHARSET': 'utf8' } }
2.在項目名或者應用名下面的__init__
文件中,指定使用pymysql替代mysqldb鏈接mysql
import pymysql pymysql.install_as_MySQLdb()
django orm簡介
django orm不能作到建立庫,只能夠建立表
# orm對象關係映射: 類 ------> 表 對象 ------> 記錄 屬性 ------> 字段值
orm可使咱們使用python面向對象的語法(句點符)來簡單快捷的操做數據
首先須要先去對應的應用下的models.py中書寫模型類(模型表)
# 示例: class User(models.Model): # int類型 primary key主鍵 auto_increment自增加 id = models.AutoField(primary_key=True) # varchar(32)類型的字段,限制展現長度爲32 name = models.CharField(max_length=32) # int類型的字段 password = models.IntegerField() # 其實建立的仍是varchar類型 email = models.EmailField(default='123@qq.com') # hobby字段能夠爲空 hobby = models.CharField(null=True,max_length=32)
以後須要執行數據庫遷移命令:
*************************數據庫遷移(同步)命令************************ python3 manage.py makemigrations # 僅僅是將你對數據庫的改動記錄到某個小本本上(migrations文件夾) python3 manage.py migrate # 將改動真正的同步到數據庫中 ***********只要你動了models.py跟數據庫相關的代碼 你就必需要從新執行上面的兩條命令來保證數據庫與models.py一致***********
字段的增刪改查
字段的增
直接在models.py文件中的模型表新增字段,再執行數據庫遷移命令便可
- 給該字段設置默認值
- models.EmailField(default='123456@com')
- 運行該字段能夠爲空
- models.EmailField(null=True)
字段的查
....
字段的改
直接修改models.py文件中的代碼後,執行數據庫遷移命令便可
字段的刪
只要註釋掉對應的字段,再執行數據庫遷移命令就會將對應的字段及數據信息所有刪除(慎用)
數據的增刪改查
查
一、查詢單條數據
from app01 import models # 先導入models模型表 models.類名.objects.filter(字段名='字段值') res = models.User.objects.filter(username='jason') # select * from user where username='jason' # 返回的結果是一個列表 支持索引取值可是不支持負數而且不推薦使用 推薦你使用它給你封裝好的方法 user_obj = res.first() # 取上面返回的列表中的第一個值 # filter方法條件不存在的時候 不會報錯返回的是一個空列表 """ filter括號內直接放多個關鍵字參數 而且多個關鍵字參數之間是and關係 res = models.User.objects.filter(username='jason',password='123') # 相似執行select * from user where username='jason' and password='123'; """
二、查詢全部的數據
- filter() 括號內不寫拿全部
- all() 查詢全部數據
查詢數據,返回的是一個相似列表套字典的數據
<QuerySet [<User: jason>, <User: egon>, <User: sean>, <User: admin>, <User: 你不行>]>
增
一、create()
user_obj = models.User.objects.create(**kwargs) user_obj = models.User.objects.create(name=username,password=password) print(user_obj,user_obj.name) # 該方法有返回值,返回值就是當前被建立的對象自己
二、對象的綁定方法
# 先生成一個User對象 user_obj = models.User(name=username, password=password) # 調用對象的綁定方法 user_obj.save()
刪
models.User.objects.filter(id=delete_id).delete() # 將filter過濾出來的數據所有刪除,相似批量刪除
改
一、方式一(推薦)
models.User.objects.filter(id=edit_id).update(name=username, password=password)
二、方式二(瞭解,不推薦)
經過對對象進行賦值和對象的綁定方法
# 先獲取數據對象 edit_obj = models.User.objects.filter(id=edit_id).first() # 再修改對象屬性 edit_obj.name = username edit_obj.password = password # 調用對象的綁定方法保存 edit_obj.save() # 該方法會將全部的字段的數據從新修改,並非針對某個字段進行修改,不推薦。