1. 程式人生 > >Django-website 程序案例系列-4 ORM數據庫操作

Django-website 程序案例系列-4 ORM數據庫操作

get display pass 數據庫 render model isp base action

數據庫表的創建:

使用mysql時註意,在setting.py中的設置:

DATABASES = {
‘default‘: {
‘ENGINE‘: ‘django.db.backends.mysql‘, #mysql的引擎
‘NAME‘: ‘‘, #數據庫名
‘USER‘: ‘‘, #數據庫用戶名
‘PASSWORD‘: ‘‘, #數據庫密碼
‘HOST‘: ‘127.0.0.1‘, #數據庫host
‘PORT‘: ‘3306‘, #數據庫端口
},
}

還需在項目文件夾下的__init__.py中添加mysql的驅動:

#django默認使用MySQLdb模塊連接mysql
#需要主動修改為pymysql
import pymysql
pymysql.install_as_MySQLdb()

models.py # 在這個文件中創建類

from django.db import models

# 生成的表名為day1_userinfo
class UserInfo(models.Model): #創建的類必須繼承models.Model
# id列,自增,主鍵 不用用戶創建 django會自己給你創建一個
username = models.CharField(max_length=32)
password = models.CharField(max_length=64)

在命令符界面執行:
python manage.py makemigrations #生成臨時文件在migrations文件夾中
python manage.py migrate     #在數據庫中生成表

技術分享圖片

生成了django自帶的很多張表

數據庫表基本操作:

def orm(request):
#插入數據
#方式1:
models.UserInfo.objects.create(username=‘root‘,password=‘123‘,)
#方式2
obj = models.UserInfo(username=‘zhangjian‘, password=‘123‘)
obj.save()
#方式3
dic ={‘username‘: ‘hapi‘, ‘password‘: ‘1123‘}
models.UserInfo.objects.create(**dic)
#查詢數據
#查詢表出來的是一個django表對象是以列表QuerySet對象
<QuerySet [<UserInfo: UserInfo object>, <UserInfo: UserInfo object>, <UserInfo: UserInfo object>]>
result = models.UserInfo.objects.all() #查詢所有
result = models.UserInfo.objects.filter(username=‘root‘,password=‘123‘) #條件查詢
for row in result: #對表進行循環取出值
print(row.id, row.username, row.password)
#刪除操作
models.UserInfo.objects.filter(username=‘root‘).delete() #刪除用戶名為root的
#更新操作
models.UserInfo.objects.all().update(password=666)#所有用戶密碼改成666

return HttpResponse(‘orm‘)

頁面操作數據庫增刪改查:


url路由配置:
url(r‘^index/‘, views.index),
url(r‘^user_info/‘, views.user_info),
url(r‘^userdetail-(?P<uid>\d+)/‘, views.userdetail),
url(r‘^userdel-(?P<uid>\d+)/‘, views.userdel),
url(r‘^usered-(?P<uid>\d+)/‘, views.usered),
index.html頁面:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<style>
    body{
        margin: 0;
    }
    .menu{
        display: block;
        padding: 5px;
    }
</style>
<body>

    <div style="height: 48px;background-color: black;color: white">
        <h3>111111111111111</h3>
    </div>
    <div>
        <div style="position: absolute;top: 48px;bottom: 0;left: 0;width: 200px;background-color: brown;">
            <a class="menu" href="/user_info/">用戶管理</a>
            <a class="menu" href="/user_group/">用戶組管理</a>
        </div>
        <div style="position: absolute;top: 48px;left: 210px;bottom: 0;right: 0;overflow: auto;">

        </div>
    </div>
</body>
</html>

py代碼:

def index(request):
    return render(request, ‘index.html‘)

查詢用戶頁面user_info.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<style>
    body{
        margin: 0;
    }
    .menu{
        display: block;
        padding: 5px;
    }
</style>
<body>

    <div style="height: 48px;background-color: black;color: white">
        <h3>111111111111111</h3>
    </div>
    <div>
        <div style="position: absolute;top: 48px;bottom: 0;left: 0;width: 200px;background-color: brown;">
            <a class="menu" href="/user_info/">用戶管理</a>
            <a class="menu" href="/user_group/">用戶組管理</a>
        </div>
        <div style="position: absolute;top: 48px;left: 210px;bottom: 0;right: 0;overflow: auto;">
            <h3>添加用戶</h3>
            <form action="/user_info/"  method=‘POST‘>
                <input type="text" name="user"/>
                <input type="text" name="pwd" />
                <input type="submit" name="添加"/>
            </form>
                <h3>用戶列表</h3>
            <ul>
                {% for row in user_list %}
                <li>
                    <a href="/userdetail-{{ row.id }}/">{{ row.username }}</a> |
                    <a href="/userdel-{{ row.id }}/">刪除</a> |
                    <a href="/usered-{{ row.id }}/">編輯</a>
                </li>
                {% endfor %}
            </ul>
        </div>
    </div>
</body>
</html>  

用戶詳情頁面userdetail.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<style>
    body{
        margin: 0;
    }
    .menu{
        display: block;
        padding: 5px;
    }
</style>
<body>

    <div style="height: 48px;background-color: black;color: white">
        <h3>111111111111111</h3>
    </div>
    <div>
        <div style="position: absolute;top: 48px;bottom: 0;left: 0;width: 200px;background-color: brown;">
            <a class="menu" href="/user_info/">用戶管理</a>
            <a class="menu" href="/user_group/">用戶組管理</a>
        </div>
        <div style="position: absolute;top: 48px;left: 210px;bottom: 0;right: 0;overflow: auto;">
            <h1>用戶詳細信息</h1>
            <h5>{{ obj.id }}</h5>
            <h5>{{ obj.username }}</h5>
            <h5>{{ obj.password }}</h5>
        </div>
    </div>
</body>
</html>

py代碼:

def user_info(request):
    if request.method == "GET":
        user_list = models.UserInfo.objects.all()
        print(user_list.query) #查看原生的sql語句
    elif request.method == "POST":
        u = request.POST.get(‘user‘)
        p = request.POST.get(‘pwd‘)
        models.UserInfo.objects.create(username=u, password=p)
        return redirect(‘/user_info/‘)
    return render(request, ‘userinfo.html‘, {"user_list": user_list})
def userdetail(request, uid):
obj = models.UserInfo.objects.filter(id=uid).first() #取id=uid的用戶
return render(request, ‘user_detail.html‘, {"obj": obj})

刪除用戶py代碼:

def userdel(request, uid):
    models.UserInfo.objects.filter(id=uid).delete()
    return redirect(‘/user_info/‘)

修改用戶py代碼:

def usered(request, uid):
    if request.method == "GET":
        obj = models.UserInfo.objects.filter(id=uid).first()
        return render(request, ‘usered.html‘, {"obj": obj})
    elif request.method == "POST":
        u = request.POST.get("username")
        p = request.POST.get("password")
        models.UserInfo.objects.filter(id=uid).update(username=u, password=p)
        return redirect(‘/user_info/‘)




Django-website 程序案例系列-4 ORM數據庫操作