小白必會三板斧
- HttpResponse:返回字符串
- render:返回HTML頁面
- redirect:重定向
靜態文件配置
什麼是靜態文件
網站所用到的css
- 本身寫好js
- 本身寫好css
- 第三方的框架 bootstrap、fontwesome、sweetalert
一般狀況下 網站所用到的靜態文件資源 統一都放在static文件夾下html
STATIC_URL = '/static/'
是訪問靜態資源的接口前綴,也就是說,'/static/'
就像一個令牌,只要是去訪問靜態資源,就必須先通過'/static/'
,否則的話就沒法找到,只要你想訪問靜態資源 你就必須以static
開頭。python
手動配置靜態文件訪問資源
在settings.py
中配置mysql
STATICFILES_DIRS = [
os.path.join(BASE_DIR,'static'), os.path.join(BASE_DIR,'static1'), ]
接口前綴 動態解析
有下面的代碼,你就不必定必須按照static
去訪問靜態資源,多是其餘的項目經理規定好的,eg:xxx
sql
{% load static %}
<link rel="stylesheet" href="{% static 'bootstrap/css/bootstrap.min.css' %}"> <script src="{% static 'bootstrap/js/bootstrap.min.js' %}"></script>
form表單
action參數能夠寫的形式
- 不寫:默認朝當前地址提交
- 只寫後綴/index/
- 寫全路徑
==注意:==數據庫
form表單默認朝後端提交的方式 默認是get請求django
get請求攜帶參數的方式 是在url後面eg:url?username=admin&password=213213213213213
bootstrap
缺點
- 不安全
- get請求攜帶的參數有大小限制(最大不能超過4KB左右)
ps:前期你若是要提交post請求 你就去settings.py文件註釋掉一箇中間件後端
request對象及方法
什麼是request對象
request對象主要作先後端數據交互安全
如何獲取請求方式
1)獲取post請求攜帶的數據
request.POST
2)獲取get請求攜帶的數據
request.GET
get
和post
在後端獲取用戶數據的時候 規律是同樣的
<QueryDict: {'username': ['admin', 'yjy'], 'password': ['123']}> yjy <class 'str'> 123 <class 'str'>
request.POST.get('username')
默認只取列列表的最後一個元素,若是你想將列表完整的取出 你必須用getlist()
pycharm中django鏈接數據庫
django鏈接MySQL
第一步:配置文件中配置
DATABASES = {
'default': { 'ENGINE': 'django.db.backends.mysql', # 指定數據庫 MySQL postgreSQL 'NAME': 'yjy', # 到底使用哪一個庫 'USER':'root', 'PASSWORD':'root', 'HOST':'127.0.0.1', 'PORT':3306, 'CHARSET':'utf8' } }
第二步 :須要注意的點
django默認使用的是mysqldb鏈接數據庫 可是該模塊不支持了,因此你要告訴django不要用mysqldb該用pymysql鏈接
你能夠在項目名下面的__init__.py
也能夠在應用名下面的__init__.py
文件中指定
import pymysql pymysql.install_as_MySQLdb()
django orm介紹
orm對象關係映射
類 | 數據庫的表 |
---|---|
對象 | 表的記錄 |
對象獲取屬性 | 記錄的某個字段對應的值 |
優缺點:
優勢:可以讓一個不會操做數據庫的人也可以簡單快捷去使用數據庫
缺點:因爲封裝程度過高,可能會致使呈持續的執行效率偏低
注意事項:
django的orm不會自動建立庫,庫須要本身手動建立
表會自動建立 咱們只須要書寫符合django orm語法的代碼便可
怎樣去建立一張表?
去應用下所在的models.py中書寫類
from django.db import models # Create your models here. class Userinfo(models.Model): # 設置id字段爲userinfo表的主鍵 id int primary key auto_increment id = models.AutoField(primary_key=True) # 在django中 你能夠不指定主鍵字段 django orm會自動給你當前表新建一個名爲id的主鍵字段 # 設置username字段 username varchar(64) CharField必需要指定max_length參數 username = models.CharField(max_length=64) # 在django orm中 沒有char字段 可是django 暴露給用戶 能夠自定義char字段 # 設置password字段 password int password = models.IntegerField()
數據庫遷移(同步)命令[很重要!!!]
python manage.py makemigrations # 不會建立表 僅僅是生成一個記錄 將你當前的操做記錄到一個小本本上(migrations文件夾上) python manage.py migrate # 將你的orm語句真正的遷移到(同步)到數據庫中
只要你在models.py中修改了跟數據庫相關的代碼 你就必須從新開始執行上面兩條命令,他真的很重要
字段和數據的增刪改查
字段的增刪改查
增:
在models.py中增
phone = models.BigIntegerField(default=110) # 新增的字段 能夠提早設置默認值 addr = models.CharField(max_length=64,null=True) # 新增的字段 能夠設置爲空
刪:
直接註釋,提交django遷移命令,不推薦使用
改
直接在代碼中改,提交django遷移命令就行
查
直接看代碼有什麼字段就行了啊
數據(記錄)的增刪改查
增
原生SQL:
insert into userinfo(username,password) values('admin','666');
ORM:
方式一:
obj= userinfo(name='yjy',password=123) obj.save()
方式二:推薦使用
obj = userinfo.objects.create(name='yjy',password=123)
刪
原生SQL:
delete from userinfo where name='admin';
ORM:
刪除單條數據
obj=userinfo.object.first() obj.delete()
刪除QuerySet只能給的多條數據(用的比較多)
userinfo.object.filter(pk=edit_id).delete()
刪除全部
models.object.all().delete()
改
原生SQL:
update userinfo set name='admin' where name='yjy';
ORM:
修改單條數據
#獲取記錄對象 obj= userinfo.objects.filter(name='yjy')[0] #修改記錄對象屬性的值 obj.name='YJY' #從新保存 obj.save
修改全部記錄:推薦使用
userinfo.object.filter(pk=edit_id).update(name='YJY')
查
原生SQL:
select * from userinfo where username='yjy' and password=123;
ORM:
res = models.Userinfo.objects.filter(username=username,password=password).first()
查詢數據get與filter的區別
get:
當查詢條件不存在的時候 會直接報錯
若是存在會直接給你返回 數據對象自己
filter:
當查詢條件不存在的時候 不會報錯而是返回一個空
當條件存在的狀況下 不管數據有幾條返回的都是列表套對象的數據格式
filter能夠當多個查詢條件 而且是and關係
filter的結果支持索引取值,可是不支持負數取值,它讓你用它本身封裝的方法eg:first()
# user_obj = res[-1] # 你能夠將filter查詢出來的結果當作列表去對待 支持正數的索引取值和切片 不支持負數 user_obj = res.first() # 取queryset第一個元素