Django---DjangoORM操做數據庫(增刪改查)

  前面介紹了Django如何鏈接數據庫,也介紹了Django添加數據到數據庫,既然提到了數據庫,確定離不開增刪改查,今天經過實例介紹下如何經過ORM操做數據庫html

展現數據

舉個例子,把前面的用戶表的數據所有都展現出來,而後咱們經過這個對這個數據表進行增刪改查前端

一、首先在views.py文件中,添加讀取數據庫內容的函數數據庫

# views.py

from django.shortcuts import render,redirect
from Anjing import models

# 查看數據
def user_list(request):
    # 查詢數據庫用戶數據
    user_ret = models.User.objects.all()
    # 返回給前端頁面   
    return render(request ,'user_list.html',{'user':user_ret})

二、在urls.py文件中,建立請求路徑django

from django.contrib import admin
from django.conf.urls import url
from django.urls import path
from Anjing import views

urlpatterns = [
    path('user_list/', views.user_list),    # 展現

]

三、建立一個user_list.html文件函數

# user_list.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>用戶名列表</title>
</head>
<body>
<center>
<h1>用戶名列表</h1>
<table border="1">
    <thead>
    <tr>
        <th>序號</th>
        <th>id</th>
        <th>用戶名</th>
        <th>密碼</th>
        <th>郵箱</th>
    </tr>
    </thead>
    <tbody>
    {% for i in user %}
    <tr>
            <td>{{ forloop.counter }}</td>
            <td>{{ i.id }}</td>
            <td>{{ i.username }}</td>
            <td>{{ i.password }}</td>
            <td>{{ i.email }}</td>
            </tr>
    {% endfor %}
</center>
</body>
</html>

四、啓動Django http://127.0.0.1:8000/user_list/ 查看列表顯示oop

新增數據

新增數據應該不用說了吧,前面寫的登陸案例Django---Django註冊登陸數據保存數據庫,也能夠經過在展現頁面新加一個入口新增一條數據post

一、修改user_list.html文件, <a href="/add_user/">添加用戶</a><br /> 加入一個新增入口url

# user_list.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>用戶名列表</title>
</head>
<body>
<center>
<h1>用戶名列表</h1>
<a href="/add_user/">添加用戶</a><br />
<table border="1">
    <thead>
    <tr>
        <th>序號</th>
        <th>id</th>
        <th>用戶名</th>
        <th>密碼</th>
        <th>郵箱</th>
    </tr>
    </thead>
    <tbody>
    {% for i in user %}
    <tr>
            <td>{{ forloop.counter }}</td>
            <td>{{ i.id }}</td>
            <td>{{ i.username }}</td>
            <td>{{ i.password }}</td>
            <td>{{ i.email }}</td>
            </tr>
    {% endfor %}
</center>
</body>
</html>

二、views.py加入新增數據的函數,判斷下若是重複提示用戶名已重複spa

# views.py

from django.shortcuts import render,redirect
from Anjing import models

# 新增數據
def add_user(request):
    error_name = ''
    if request.method == 'POST':
    # 一、獲取前端輸入的數據
        user = request.POST.get('username')
        password = request.POST.get('password')
        email = request.POST.get('email')
        user_list = models.User.objects.filter(username=user)
         # 二、判斷數據庫是否存在
        if user_list :
                error_name = '%s用戶名已經存在了' % user
                return  render(request,'add_user.html',{'error_name':error_name})
        # 三、存儲到數據庫中
        else:
            user = models.User.objects.create(username=user,
                                       password=password,
                                       email=email)
            user.save()
            return redirect('/user_list/')
    return render(request, 'add_user.html')

三、urls.py文件中加入新增跳轉路徑code

# utls.py

from django.contrib import admin
from django.urls import path
from Anjing import views
urlpatterns = [
    path('user_list/', views.user_list),    # 展現
    path('add_user/', views.add_user),    # 新增
]

四、新建一個add_user.html文件

添加完成後成功跳轉到user_list.html頁面並展現出來

# add_user.html

<!
DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>新增頁面</title> </head> <body> <form action="/add_user/" method="post"> {% csrf_token %} <p style="text-align:center">用戶:<input type="text" name="username" /></p> <p style="text-align:center">郵箱:<input type="text" name="email"/> </p> <p style="text-align:center">密碼:<input type="password" name="password"/></p> <p style="text-align:center"><input type="submit" value="提交" /> <p style="color: red;text-align: center">{{ error_name }}</p> </form> </body> </html>

五、啓動Django,新增數據

首先建立一個已經存在的數據,會自動提示,新增新數據,則新增成功並展現出來

刪除數據

若是想要刪除一條數據的話,能夠經過在展現頁面加入一個操做框,而後點擊刪除,數據就會自動刪除

一、修改user_list.html文件,加入操做欄  <th>操做</th> ,和刪除按鈕 <td><a href="/delete_user/?id={{ i.id }}">刪除</a> 

# user_list.html文件

<!
DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>用戶名列表</title> </head> <body> <center> <h1>用戶名列表</h1> <a href="/add_user/">添加用戶</a><br /> <table border="1"> <thead> <tr> <th>序號</th> <th>id</th> <th>用戶名</th> <th>密碼</th> <th>郵箱</th> <th>操做</th> </tr> </thead> <tbody> {% for i in user %} <tr> <td>{{ forloop.counter }}</td> <td>{{ i.id }}</td> <td>{{ i.username }}</td> <td>{{ i.password }}</td> <td>{{ i.email }}</td> <td><a href="/delete_user/?id={{ i.id }}">刪除</a></td> </tr> {% endfor %} </center> </body> </html>

二、views.py文件中新增一個刪除函數,刪除數據庫信息

刪除數據,須要拿到數據的一個值,這裏安靜取了不會變得id值,經過id來進行刪除

# views.py

from django.shortcuts import render,redirect
from Anjing import models

# 刪除數據
def delete_user(request):
    # 取出須要刪除的id
    delete_id = request.GET.get('id')
    # 從數據庫刪除的
    models.User.objects.filter(id=delete_id).delete()
    return redirect('/user_list/')

三、urls.py文件中加入刪除路徑

這個地方雖然不須要添加html,可是要增長上路徑,否則請求就會報錯

# urls.py

from django.contrib import admin
from django.urls import path
from Anjing import views
urlpatterns = [
    path('user_list/', views.user_list),    # 展現
    path('add_user/', views.add_user),    # 新增
    path('delete_user/', views.delete_user),    # 刪除
]

四、啓動Django,刪除數據

點擊刪除按鈕,發現數據庫已經刪除完成

修改數據

這裏修改數據安靜絕對先寫個簡單的修改密碼的方法,先在展現頁面添加一個修改密碼的按鈕,點擊跳轉到修改密碼的頁面,而後進行修改,修改完成後跳轉到展現頁面

一、修改user_list.html頁面,添加一個修改密碼的按鈕 <td><a href="/update_user/?id={{ i.id }}">修改密碼</a> 

# user_list.html文件

<!
DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>用戶名列表</title> </head> <body> <center> <h1>用戶名列表</h1> <a href="/add_user/">添加用戶</a><br /> <table border="1"> <thead> <tr> <th>序號</th> <th>id</th> <th>用戶名</th> <th>密碼</th> <th>郵箱</th> <th>操做</th> </tr> </thead> <tbody> {% for i in user %} <tr> <td>{{ forloop.counter }}</td> <td>{{ i.id }}</td> <td>{{ i.username }}</td> <td>{{ i.password }}</td> <td>{{ i.email }}</td> <td><a href="/delete_user/?id={{ i.id }}">刪除</a> <a href="/update_user/?id={{ i.id }}">修改密碼</a></td>
 </tr> {% endfor %} </center> </body> </html>

二、views.py中新增一個修改函數

這裏修改密碼沒有作任何的判斷,只是單純的修改信息,後面會加上修改密碼的案例

# views.py

from django.shortcuts import render,redirect
from Anjing import models

# 修改數據
def update_user(request):
    update_id = request.GET.get('id')
    if request.method == 'POST':
        new_pwd = request.POST.get('password')
        # 找到匹配的id
        update_obj = models.User.objects.get(id=update_id)
        # 取出密碼和新密碼對應
        update_obj.password = new_pwd
        # 保存數據庫
        update_obj.save()
        return redirect('/user_list/')
    ret = models.User.objects.get(id=update_id)
    return render(request, 'update_user.html', {'ret': ret})

三、urls.py文件中加入修改密碼的路徑

# urls.py文件

from django.contrib import admin
from django.urls import path
from Anjing import views
urlpatterns = [
    path('user_list/', views.user_list),    # 展現
    path('add_user/', views.add_user),    # 新增
    path('delete_user/', views.delete_user),    # 刪除
    path('update_user/', views.update_user),    # 修改
]

四、新增一個update_user.html文件。

經過惟一不變的id進行判斷去的哪個值,而後進行修改,保存在數據庫

# update_user.html

<!
DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>修改信息</title> </head> <body> <center> <h1>修改密碼</h1> <form action="/update_user/?id={{ ret.id }}" method="post"> {% csrf_token %} 密碼:<input type="text" name="password" value="{{ ret.password }}"> <input type="submit"> </center> </body> </html>

五、啓動Django,修改密碼,查看數據信息

 

總結

這裏主要經過一個小的例子想讓你們很清楚的看到頁面和代碼中的一些變化,幫助你們加深印象

總結下ORM數據庫增刪改查語句

增長數據:

# 新增數據
user = models.類名.objects.create(列表名1=XXX,
                                       列表名2=xxxx,
                                      xxxx=xxxx)
# 保存

user.save()

刪除數據:

# 刪除數據

models.類名.objects.filter(列表名=列值).delete()

修改數據:

# 修改數據

obj = 類名.objects.get(id='')    # 找到想要修改的那條數據

obj.name = '新值'     # 修改的那個值

obj.save()     # 保存

查詢數據:

# 查詢數據

類名..objects.all()    # 查詢所有數據

類名.objects.filter(列名=‘XXXX’)  # 過濾條件查詢

類名.objects.get(列表='XXX')      # 直接取數據

 

 

emmm,這一篇寫了很久了,一直沒發出去,最近又不知道寫什麼了。。有點愧對大家的關注了~~ 調整狀態,加油~

相關文章
相關標籤/搜索