Python学习

2021-05-11  本文已影响0人  逛逛_堆栈

python Django(三)

Django单表操作-SQLite3

1、创建应用

1.1、添加应用

py manage.py startapp studentmanager

1.2、修改配置

修改settings.py文件的INSTALLED_APPS配置项

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'studentmanager', # 注册自己的应用
]

2、生成数据表

2.1、创建模型

class StudentInfo(models.Model):
    # id = models.AutoField(primary_key=True)  # id 会自动创建,可以手动写入
    name = models.CharField(max_length=30)  # 字符串
    sex = models.CharField(max_length=2)  # 性别
    birth = models.DateField()  # 日期类型

2.2、生成迁移文件

根据模型类型生成sql语句。

py manage.py makemigrations

生成的迁移文件就在migrations文件夹下

operations = [
        migrations.CreateModel(
            name='StudentInfo',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('name', models.CharField(max_length=30)),
                ('sex', models.CharField(max_length=2)),
                ('birth', models.DateField()),
            ],
        ),
    ]

使用的数据库settings文件中默认是sqlite3,项目中出现文件db.sqlite3

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

这里使用的是社区版的pycharm,查看sqlite3数据库,需要借助插件Database Navigator

2.3、执行迁移

执行sql语句生成数据表。

py manage.py migrate

查看生成的表


3、数据操作

配置应用路由

from django.contrib import admin
from django.urls import path
from django.conf.urls import url,include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('stu/',include('studentmanager.urls')),  # 配置studentmanager的urls
]

在应用下创建urls.py并配置增删改查路由

from django.conf.urls import url
from django.urls import path
from studentmanager import views
urlpatterns = [
    # 通过url设置url路由配置项
   # path('index',views.index),
   path('list', views.index),   # 显示所有
   path('save', views.save),      # 添加
   path('delete', views.delete),  # 删除
   path('update', views.update)    # 修改
]

3.1、添加数据

视图函数

# 添加学生视图函数
@csrf_exempt
def save(request):
    if request.method == 'POST':
        name = request.POST.get('name')
        sex = request.POST.get('sex')
        birth = request.POST.get('birth')
        stu = StudentInfo(
            name = name,
            sex = sex,
            birth = birth
        )
        stu.save()
    return index(request)

3.2、修改数据

# 修改学生信息
def update(request):
    if request.method == "POST":
        name = request.POST.get('username')
        gender = request.POST.get("gender")
        age = int(request.POST.get("age"))
        score = int(request.POST.get("score"))
        id = int(request.POST.get("id"))
        stu = StudentInfo.objects.get(id=id)
        stu.name = name
        stu.age = age
        stu.gender = gender
        stu.score = score
        stu.save()
    return index(request)

3.3、删除数据

def delete(request):
    if request.method == 'GET':
        id = request.GET.get('id')
        stu = StudentInfo.objects.filter(id = id)
        stu.delete()
    return index(request)

3.4、简单查询数据

# 显示学生信息视图函数
def index(request):
    stus = StudentInfo.objects.all()
    return render(request,'studentmanager/stus.html',{'data':stus})

3.5、页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>学生管理</title>
</head>
<body>
   <div>
        <form action="/stu/save" method="Post">
             <input type="hidden" name="csrfmiddlewaretoken" value="{% csrf_token %}"/>
             <input type="text" name="name" placeholder="用户名"/>
             <input type="text" name="sex" placeholder="性别"/>
             <input type="text" name="birth" placeholder="生日"/>
             <input type="submit" value="添加" />
        </form>
    </div>

    <div>
        <table>

            {% for row in data %}
            <tr>
                <td>{{ row.name }}</td>
                <td>{{ row.sex }}</td>
                <td>{{ row.birth }}</td>
                    <td>
                        <a href="/stu/delete?id={{row.id}}">删除</a>
                        <a href="/stu/update?id={{row.id}}">修改</a>
                    </td>
            </tr>
            {% endfor %}
        </table>
    </div>
</body>
</html>
上一篇下一篇

猜你喜欢

热点阅读