Django プロジェクトでの応答要求とデータベース操作

    • リクエストとレスポンス

  • ビュー.py

def something(request):
    # request是一个对象,封装了用户发送过来的所有请求相关数据
    # 获取请求方式
    print(request.method)
    # 在url上传递一些值 http://127.0.0.1:8000/something/?n1=123&n2=999
    print(request.GET)
    # 在请求体中提交数据
    print(request.POST)
    # 【响应】字符串内容返回给请求者
    # return HttpResponse("返回内容")
    # 【响应】读取html中的内容+渲染(替换)-> 字符串,返回给用户
    # return render(request, "something.html")
    # 【响应】让浏览器重定向到其他的页面
    return redirect("https://www.baidu.com")

ケース: ログイン

  • view.py

def login(request):
    if request.method == "GET":
        return render(request, "login.html")
    # 如果是POST请求,救护去用户提交的数据
    print(request.POST)
    username = request.POST.get("user")
    password = request.POST.get("pwd")
    if username == 'root' and password == '123':
        # return HttpResponse("登陆成功")
        return redirect("https://www.baidu.com")
    # return HttpResponse("登陆失败")
    return render(request, "login.html", {"error_msg": "用户名或密码错误"})
  • login.html: {% csrf_token %}をフォームに必ず追加してください

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>用户登录</h1>
<form method="post" action="/login/">
    {% csrf_token %}
    <input type="text" name="user" placeholder="用户名">
    <input type="password" name="pwd" placeholder="密码">
    <input type="submit" value="提 交">
    <span style="color:red">{
    
    { error_msg }}</span>
</form>
</body>
</html>

2.データベースを操作する

  • Django はデータベースをより簡単に開発および運用でき、内部で ORM フレームワークが提供されます。

2.1 サードパーティ モジュールのインストール

conda install mysqlclient

2.2ORM

  • ORM は、次の 2 つのことを行うのに役立ちます。

  • データベースでテーブルを作成、変更、削除します。(SQL文を書く必要はありません) [データベースを作成できません]

  • テーブル内のデータを操作します。(SQL文を書く必要はありません)

1. 独自のデータベースを作成する

mysql -u root -p
create database db1;
show database;

2. Django がデータベースに接続します

  • setting.py ファイルで構成します。元のデータベース構成をコメントアウトします。公式ドキュメントを参照

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

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'db1',
        'USER': 'root',
        'PASSWORD': '12345678',
        "HOST": 'localhost',
        'PORT': '3306',
    }
}

3. Django アクションシート

テーブルを作成

  • model.py

from django.db import models


# Create your models here.
class UserInfo(models.Model):
    name = models.CharField(max_length=32)
    password = models.CharField(max_length=64)
    age = models.IntegerField()

  • ターミナルで次のコマンドを入力するのと同じです。

create table app01_userinfo(
    id bigint auto_increment primary key,
    name varchar(32),
    password varchar(64),
    age int
);
  • ターミナルでコマンドを実行します (manage.py ファイルが配置されているディレクトリ内)。

python manage.py makemigrations
python manage.py migrate

注:アプリを登録する必要があります

  • ターミナルで実行

use db1;
mysql> show tables;
+----------------------------+
| Tables_in_db1              |
+----------------------------+
| app01_userinfo             |
| auth_group                 |
| auth_group_permissions     |
| auth_permission            |
| auth_user                  |
| auth_user_groups           |
| auth_user_user_permissions |
| django_admin_log           |
| django_content_type        |
| django_migrations          |
| django_session             |
+----------------------------+
11 rows in set (0.00 sec)

mysql> desc app01_userinfo;
+----------+-------------+------+-----+---------+----------------+
| Field    | Type        | Null | Key | Default | Extra          |
+----------+-------------+------+-----+---------+----------------+
| id       | bigint      | NO   | PRI | NULL    | auto_increment |
| name     | varchar(32) | NO   |     | NULL    |                |
| password | varchar(64) | NO   |     | NULL    |                |
| age      | int         | NO   |     | NULL    |                |
+----------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
  • 多くのテーブルが自動的に作成され、必要な app01_userinfo が作成されていることがわかります。

テーブルを変更または削除する

  • テーブルに新しい列を追加する場合、既存の列に既にデータが存在する可能性があるため、新しい列に対応するデータを新しい列に指定する必要があります。

  • 1.値を手動で入力する

  • 2.デフォルト値を設定するか、空にする

age = models.IntegerField(default=2)
data = models.IntegerField(null=True, blank=True)
  • 将来、開発中にテーブル構造を調整したい場合は、models.py ファイルで操作するだけで済みます。次に、ターミナルでコマンドを入力します

python manage.py makemigrations
python manage.py migrate

4.運用データの追加、削除、修正、確認

  • view.py

from app01 import models


def orm(request):
    # 测试ORM操作表中的数据
    # ### 1.新建 ###
    # models.Department.objects.create(title='销售部')
    # models.Department.objects.create(title='IT部')
    # models.Department.objects.create(title='运营部')
    # models.UserInfo.objects.create(name='qy', password='123', age=20)
    # models.UserInfo.objects.create(name='qy1', password='123', age=21)
    # ### 2.删除数据 ###
    # models.UserInfo.objects.filter(id=2).delete()
    # models.Department.objects.all().delete()
    # ### 3.获取数据 ###
    # 3.1获取符合条件的所有数据
    # data_list伪QuerySet类型
    # data_list = models.UserInfo.objects.all()
    # for obj in data_list:
    #     print(obj.id, obj.name, obj.age)
    # 3.2获取符合条件的第一条数据
    # row_obj = models.UserInfo.objects.filter(id=1).first()
    # print(row_obj.id, row_obj.name, row_obj.age)
    # ### 4.更新数据 ###
    # models.UserInfo.objects.update(password=999)
    models.UserInfo.objects.field(id=1).update(passwoed=111)
    return HttpResponse("创建成功")

ケース: ユーザー管理

1. ユーザー一覧表示 /info/list

  • url.py

  • ビュー.py

  • すべてのユーザー情報を取得する

  • HTML レンダリング

2. ユーザー/情報/追加を追加

  • url.py

  • view.py

  • GET、ページを参照、コンテンツを入力

  • POST、コンテンツの送信、データベースへの書き込み

3.ユーザー/情報/削除を削除します

  • url.py

  • view.py

  • /info/list インターフェイスで、実線でユーザーを削除するための削除ボタンを追加します

おすすめ

転載: blog.csdn.net/qyqyqyi/article/details/128832304