內部傳入一個字符串參數,返回給瀏覽器。html
在app目錄下的views.py添加函數,添加函數以前必須在urls.py添加函數對應關係,不然訪問不到python
def login(request): # 業務邏輯代碼 return HttpResponse('welcome to GuangDong')
request : 瀏覽器請求相關的信息mysql
除request參數外還接受一個待渲染的html模板文件和一個保存具體數據的字典參數。總共用三個參數sql
render(request, template_name, context=None)數據庫
將數據填充進模板文件,最後把結果返回給瀏覽器。(相似於以前用的jinja2模塊)django
def reg(request): # print(request) # print(request.__dict__) user_dict = {'name':'cxk','sex':'girl'} # return render(request,'reg.html') # 給模板傳值的方式1: # 將user_dict傳遞給reg.html頁面 頁面上經過xxx就可以獲取到該字典 return render(request,'reg.html',{'user':user_dict}) # 給模板傳值的方式2: # 這種狀況是針對有多個字典的狀況下, # locals()將當前名稱空間中全部的變量名傳遞給html頁面,在html頁面用user_dict.name方式取值 # 可是會有一個問題:影響效率。 print(locals()) return render(request,'reg.html',locals())
接受一個URL參數,表示跳轉到指定的URL。至關於重定向。後端
當我在瀏覽器輸入http://127.0.0.1:8000/home時,他就會自動跳轉到https://www.autohome.com.cn瀏覽器
def home(request): # return redirect('/index') return redirect('https://www.autohome.com.cn') def index(request): return HttpResponse('index')
第一步:從settings配置文件中配置app
# django會自帶一個小型的sqlite3數據庫,咱們只需改回咱們用的mysql就好了 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'user_info', # 數據庫名 'USER':'tomjoy', 'PASSWORD':'123456', 'HOST':3306, 'CHARSET':'utf8' } }
第二步:函數
django默認使用的是mysqldb鏈接數據庫 可是該模塊不支持了
因此須要告訴django不要用mysqldb,得用pymysql鏈接
你能夠在項目名下面的__init__.py也能夠在應用名下面的__init__.py文件中指定
import pymysql pymysql.install_as_MySQLdb()
在views.py中寫函數的時候,每一個函數必須接受一個參數叫request,這個request就是瀏覽器發送請求的請求數據,django將他封裝成一個對象。
1.獲取post請求攜帶的數據
request.POST
2.獲取get請求攜帶的數據
request.GET
發現get和post在後端獲取用戶數據的時候 規律是同樣的
print(request.POST) print(request.POST.get('username')) print(request.POST.get('password')) # <QueryDict: {'username': ['admin'], 'password': ['123']}> # admin # 123
若是是一條數據有多條值,狀況又不同了
print(request.POST) print(request.POST.get('username')) print(request.POST.get('password')) print(request.POST.get('hobby')) print(request.POST.getlist('hobby')) # <QueryDict: {'username': ['admin'], 'password': ['123'],'hobby': ['sing', 'dance', 'basketball']}> # admin # 123 # basketball
若是還用get('hobby'),他默認只取最後一個
要用getlist() 才能將完整的列表取出來
ORM即對象關係映射(Object Relational Mapping)
python: mysql:
類 即 數據庫中的表
對象 即 表的記錄
對象.屬性 即 記錄的某個字段對應的值
優勢:
可以讓一個不會數據庫操做的人 也可以簡單快捷去使用數據庫
缺點:
因爲封裝程度過高 可能會致使程序的執行效率偏低,有時候 結合項目需求 可能需 要你手寫sql語句
注意事項
1.django的orm不會自動幫你建立庫,庫須要你本身手動建立
只會自動幫你建立表 你只須要書寫符合django orm語法的代碼便可
1.在app下所在的models.py中書寫類(建立表)
from django.db import models class User(models.Model): # 設置id字段爲user表的主鍵 id int primary key auto_increment # 在django中 你能夠不指定主鍵字段 django orm會在建立當前表的時候,自動幫你新建一個名爲id的主鍵字段 id = models.AutoField(primary_key=True) # 設置username字段 username varchar(64) CharField必需要指定max_length參數 username=models.CharField(max_length=64) # 在django orm中 沒有char字段 可是django 暴露給用戶 能夠自定義char字段 # 設置password = password int password = models.IntegerField() # phone = models.BigIntegerField(default=110) # 新增的字段 能夠提早設置默認值 # addr = models.CharField(max_length=64,null=True) # 新增的字段 能夠設置爲空
2.上面的代碼僅僅是在models.py上面添加了一個類,還沒真正在數據庫中建立表,
須要再執行兩條命令:數據庫遷移(同步)命令:
須要在CMD命令行中而且在該項目下的路徑執行:
python manage.py makemigrations
不會建立表 僅僅是生成一個記錄 將你當前的操做記錄到一個小本本上(migrations文件夾)python manage.py migrate
將你的orm語句真正的遷移到(同步)到數據庫中 新增的字段:
1.直接提供默認值 default
2.設置該字段能夠爲空 null=True
注意:不要輕易地註釋models.py中任何跟數據相關的代碼
只要是跟數據庫相關的代碼,處理時必定要謹慎謹慎!!!
1.get()方式:
從數據庫獲取對象(固定寫法) models . 表名 . objects.get(條件)
select * from User where username='cxk'
obj = models.User.objects.get(username='cxk')
拿到obj後便可進行點取值
例:
print(obj.username) print(obj.password)
注意:get取值方式在 當查詢條件不存在的時候 ,會直接報錯 。 若是存在會直接給你返回 數據對象自己。 因此不推薦使用
2.filter()方式 推薦使用
obj = models.User.objects.filter(username='cxk')
--當查詢條件不存在的時候 不會報錯而是返回一個空
--當條件存在的狀況下 不管數據有幾條返回的都是列表套對象的數據格式
--filter能夠當多個查詢條件 而且是and關係,用逗號隔開每一個條件
--你能夠將filter查詢出來的結果當作列表去對待 ,列表裏面放的是一個個對象
--支持正數的索引取值和切片但 不支持負數,因此仍是不建議用切片取值
--建議使用first()取第一個元素
user_obj = obj[0] user_obj = obj[0:3] user_obj = obj[-1] # 報錯 user_obj = res.first() 取queryset第一個元素
3.數據的增:
1.create() :
--括號內參數是以關鍵字參數的形式,去建立數據
--該方法由一個返回值,返回值就是當前對象自己
# 直接將用戶名和密碼寫入數據庫 # insert into User(username,password) values('cxk','123') user_obj = models.User.objects.create(username='cxk',password='123')
2.利用對象點方法的方式:
user_obj = User(username='cxk',,password='123') user_obj.save() # 將當前對象保存到數據庫中
4.數據的增:
方式一:update()
方式二:
5.數據的刪除:
delete()