form表單默認是以get請求提交數據的css
http://127.0.0.1:8000/login/?username=admin&password=123html
action前端
1.不寫 默認朝當前地址提交數據python
2.全路徑mysql
3.後綴(/index)jquery
提交post請求的時候 須要先去配置文件中註釋掉一行sql
視圖函數應該作到針對不一樣的請求 作出不一樣的處理邏輯數據庫
- get請求來 應該只須要返回一個html文件django
- post請求來 應該獲取用戶提交的數據 而後作進一步處理bootstrap
你必需要可以判斷出當前請求究竟是什麼請求
request.method # 結果是一個純大寫的字符串 GET/POST
一般狀況下針對不一樣的請求應該作不一樣的處理
def login(request): # if request.method =='GET': # #GET邏輯 # return render(request, 'login.html') # elif request.method =='POST': # #POST邏輯 # print(request.method, type(request.method)) # GET <class 'str'> POST <class 'str'> # return HttpResponse('收到了你的數據,立刻處理') # print(request.method) #獲取前端請求方式 """爲了減小代碼的層級:通常狀況下視圖函數處理get請求較多,因此能夠直接在函數體內先寫GET請求對應的邏輯 將其餘請求利用request.method作出區分 """ if request.method == 'POST': return HttpResponse('收到了') return render(request, 'login.html')
request.POST #相似因而一個大字典 # <QueryDict: {'username': ['admin', 'jason'], 'password': ['123']}> request.POST.get() # 只會取列表最後一個元素 request.POST.getlist() # 取出整個列表
以下所示,是一個簡易的登陸頁面 login.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script> {% 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> </head> <body> <div class="container"> <div class="row"> <div class="col-md-8 col-md-offset-2"> <h2 class="text-center">登陸</h2> <form action="" method="post"> <p>username:<input type="text" name="username" class="form-control"></p> {# <p>username:<input type="text" name="username" class="form-control"></p>#} <p>password:<input type="text" name="password" class="form-control"></p> {# <p>hobby:#} {# bbb<input type="checkbox" name="hobby" value="bbb">#} {# aaa<input type="checkbox" name="hobby" value="aaa">#} {# ccc<input type="checkbox" name="hobby" value="ccc">#} {# </p>#} <input type="submit" class="btn btn-success "> </form> </div> </div> </div> </body> </html>
針對login.html頁面進行相應地取值和處理的邏輯操做
def login(request): if request.method == 'POST': #如何獲取數據(GET和POST) print(request.POST) #獲取post請求攜帶的數據 #獲取用戶的用戶名與密碼 # <QueryDict: {'username': ['hank'], 'password': ['123']}> username = request.POST.get('username') # 用get取值只會取列表最後一個元素 password = request.POST.get('password') print(username,type(username)) #hank <class 'str'> print(password,type(password)) #123 <class 'str'> #若是你想直接拿到列表 hobby = request.POST.getlist('hobby') # getlist取到的是一個列表 print(hobby,type(hobby)) #['bbb', 'aaa', 'ccc'] <class 'list'> return HttpResponse('收到了') return render(request, 'login.html')
注意:GET請求獲取的數據格式和POST同樣
request.GET # 獲取符合get請求攜帶數據格式的數據 url?xxx=yyy&ooo=lll # <QueryDict: {'username': ['admin', 'jason'], 'password': ['123']}> request.GET.get() # 只會取列表最後一個元素 request.GET.getlist() # 取出整個列表
針對login.html頁面進行相應地取值和處理的邏輯操做
def login(request): if request.method == 'POST': #如何獲取數據(GET和POST) print(request.POST) #獲取post請求攜帶的數據 #獲取用戶的用戶名與密碼 # <QueryDict: {'username': ['hank'], 'password': ['123']}> username = request.POST.get('username') # 用get取值只會取列表最後一個元素 password = request.POST.get('password') print(username,type(username)) #hank <class 'str'> print(password,type(password)) #123 <class 'str'> #若是你想直接拿到列表 hobby = request.POST.getlist('hobby') # getlist取到的是一個列表 print(hobby,type(hobby)) #['bbb', 'aaa', 'ccc'] <class 'list'> return HttpResponse('收到了')
print(request.GET) print(request.GET.get('username'),type(request.GET.get('username'))) print(request.GET.getlist('password'),type(request.GET.getlist('password'))) return render(request,'login.html')
前提:Django鏈接數據庫,須要你本身提早建立好對應的庫
1.先去配置文件中配置相關參數
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', #數據庫的類別 'NAME': 'db1', #庫的名字 'HOST':'127.0.0.1', 'PORT': 3306, 'USER': 'root', 'PASSWORD': '123', 'CHARSET': 'utf8' } }
# 對於python3的使用者們還須要再加一步操做 # 因爲Django內部鏈接MySQL時使用的是MySQLdb模塊,而python3中還無此模塊,因此須要使用pymysql來代替 # 以下設置放置的與項目同名或者應用下的 __init__.py文件中 import pymysql pymysql.install_as_MySQLdb()
django orm不會幫你建立庫 只能幫你自動建立表
orm對象關係映射:
類 -------> 表
對象 -------> 記錄
屬性 -------> 字段值
首先須要先去對應的應用下的models.py中書寫你的模型類(表)
class User(models.Model): # id int primary key auto_increment
#當你沒有指定主鍵的時候,django orm會自動幫你建立一個名爲id的主鍵字段
#一旦檢測到你本身建立了主鍵字段,那麼就不會再幫你chuang
id = models.AutoField(primary_key=True) # name varchar(32) name = models.CharField(max_length=32) # password int password = models.IntegerField()
python3 manage.py makemigrations # 僅僅是將你對數據庫的改動記錄到某個小本本上(migrations文件夾) python3 manage.py migrate # 將改動真正的同步到數據庫中 """ 上面兩個命令必須是成對出現的 """
只要你動了models.py跟數據庫相關的代碼 你就必需要從新執行上面的兩條命令來保證數據庫與models.py一致
字段的增
1.要麼給該字段設置默認值
2.要麼運行該字段能夠爲空
字段的改
直接修改表中字段的代碼 以後執行數據庫遷移命令便可
字段的刪
只要註釋掉對應的字段 執行數據庫遷移命令就會將對應的字段及數據信息所有刪除(慎用)
一、filter()
from app01 import models
res = models.User.objects.filter(username='hank') # select * from user where username='jason' # 返回的res是一個列表 user_obj = res.first() # filter方法條件不存在的時候 不會報錯返回的是一個空列表
""" filter括號內直接放多個關鍵字參數 而且多個關鍵字參數之間是and關係 """ # select * from user where username='jason' and password='123'; res = models.User.objects.filter(username='jason',password='123')
見以下詳情:
from app01 import models def login(request): if request.method == 'POST': username = request.POST.get('username') # 用get取值只會取列表最後一個元素 password = request.POST.get('password') #查詢數據庫 #下面返回的結果能夠看做是一個列表, res = models.User.objects.filter(name=username) # print(res) # <QuerySet [<User: User object>]> #user_obj = res[0] # QuerySet支持索引取值可是不支持負數,不推薦使用 user_obj = res.first() print(user_obj.name,user_obj.password) return HttpResponse('收到了') return render(request,'login.html')
二、查全部的數據
filter() 括號內寫任何參數就是 查詢全部數據
all() 查詢全部數據
user_queryset = models.User.objects.filter() ''' or ''' user_queryset = models.User.objects.all()
準備:先寫好一個註冊的html頁面
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script> {% 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> </head> <body> <div class="container"> <div class="row"> <div class="col-md-8 col-md-offset-2"> <h2 class="text-center">註冊</h2> <form action="" method="post"> <p>username:<input type="text" name="username" class="form-control"></p> {# <p>username:<input type="text" name="username" class="form-control"></p>#} <p>password:<input type="text" name="password" class="form-control"></p> {# <p>hobby:#} {# bbb<input type="checkbox" name="hobby" value="bbb">#} {# aaa<input type="checkbox" name="hobby" value="aaa">#} {# ccc<input type="checkbox" name="hobby" value="ccc">#} {# </p>#} <input type="submit" class="btn btn-primary "> </form> </div> </div> </div> </body> </html>
方法一、create()
def reg(request): if request.method == 'POST': username = request.POST.get('username') password = request.POST.get('password') #直接朝數據庫中添加數據 user_obj = models.User.objects.create(name=username,password=password) print(user_obj,user_obj.name) return render(request,'register.html')
方法二、對象的綁定方法
#1 先生成一個User對象 user_obj = models.User(name=username, password=password) #2 調用對象的綁定方法 user_obj.save()
準備一個用戶展現頁home.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script> {# <link href="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet">#} {# <script src="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script>#} {% 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> </head> <body> <div class="container"> <div class="row"> <div class="col-md-8 col-md-offset-2"> <h1 class="text-center">數據展現</h1> <table class="table table-striped table-hover"> <thead> <tr> <th>id</th> <th>name</th> <th>password</th> <th>operation</th> </tr> </thead> <tbody> {% for user_obj in res %} <!--[user_obj1,user_obj2...]--> <tr> <td>{{ user_obj.id }}</td> <td>{{ user_obj.name }}</td> <td>{{ user_obj.password }}</td> <td> <a href="/edit_user/?edit_id={{ user_obj.id }}" class="btn btn-primary btn-xs">編輯</a> <a href="/delete_user/?delete_id={{ user_obj.id }}" class="btn btn-danger btn-xs">刪除</a> </td> </tr> {% endfor %} </tbody> </table> </div> </div> </div> </body> </html>
models.User.objects.filter(id=1).delete() # 將filter過濾出來的數據所有刪除 批量刪除
見以下詳情:
def del_user(request): # 獲取用戶想要刪除的數據id delete_id = request.GET.get('delete_id') # 直接根據id刪除數據 models.User.objects.filter(id=delete_id).delete() #將filter過濾出來的數據所有刪除 #重定向到展現頁 return redirect('/home')
# 方式一(推薦) 批量更新 models.User.objects.filter(id=1).update(name=username,password=password)
# 方式二(瞭解) # 1.先獲取數據對象 edit_obj =models.User.objects.filter(id=1).first() # 2.再修改對象屬性 edit_obj.name = username edit_obj.password = password # 3.調用對象的綁定方法保存 edit_obj.save()
見以下詳情:
def edit_user(request): #獲取用戶想要修改的數據id值 edit_id = request.GET.get('edit_id') if request.method == 'POST': #獲取用戶修改以後的用戶名和密碼 username = request.POST.get('username') password = request.POST.get('password') # 修改數據 # 方式一 models.User.objects.filter(id=edit_id).update(name=username,password=password) # 方式二 # 1.先獲取數據對象 edit_obj =models.User.objects.filter(id=edit_id).first() # 2.再修改對象屬性 edit_obj.name = username edit_obj.password = password # 3.調用對象的綁定方法保存 edit_obj.save() #再次跳轉到數據展現頁 return redirect('/home') #根據id獲取數據對象,而且展現到html頁面上 edit_obj = models.User.objects.filter(id=edit_id).first() return render(request,'edit_user.html',{'edit_obj':edit_obj})