- リクエストとレスポンス
ビュー.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 インターフェイスで、実線でユーザーを削除するための削除ボタンを追加します