Python Django学习之数据库
接https://www.cnblogs.com/rainbow-tan/p/13385754.html
1、创建数据库
create database DjangoDB default charset=utf8;

2、配置数据库信息
在settings.py中添加代码

3、创建数据库模型
python D:\Python37\Scripts\django-admin.py startapp Model
创建后项目目录

4、settings.py配置模型

5、下载并配置mysql包
去https://www.lfd.uci.edu/~gohlke/pythonlibs/下载对应MySQLclient
安装命令
pip install mysqlclient-1.2.10-cp27-cp27m-win32.whl
settings.py同级目录中的__init__.py添加代码
import pymysql pymysql.install_as_MySQLdb()
6、定义表结构
在models.py中添加代码
from django.db import models # Create your models here. class user_info(models.Model): account = models.CharField(max_length=20,primary_key=True,null=False) password=models.CharField(max_length=20,null=False) username=models.CharField(max_length=20,null=True) birthday=models.DateTimeField(null=True) sex=models.CharField(max_length=8,null=True)
7、与数据库交互
python manage.py migrate
python manage.py makemigrations Model
python manage.py migrate Model
运行后数据库如下

如果出现错误提示raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__)
则注释D:\Python37\Lib\site-packages\django\db\backends\mysql\base.py中错误提示代码(原因是 MySQLclient不支持python3.4以上)

8、增删改查
在settings.py同级添加dbmode.py
from django.db import models # Create your models here. class user_info(models.Model): account = models.CharField(max_length=20,primary_key=True,null=False) password=models.CharField(max_length=20,null=False) username=models.CharField(max_length=20,null=True) birthday=models.DateTimeField(null=True) sex=models.CharField(max_length=8,null=True)
(1)增加
在login.html同级添加database.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>数据库测试</title>
<link rel="stylesheet" href="/static/css/bootstrap.min.css">
<link rel="stylesheet" href="/static/bootstrap-datetimepicker-master/css/bootstrap-datetimepicker.min.css">
<script src="/static/js/jquery-1.11.3.min.js"></script>
<script src="/static/js/bootstrap.min.js"></script>
<script src="/static/bootstrap-datetimepicker-master/js/bootstrap-datetimepicker.min.js"></script>
</head>
<button class="btn btn-primary btn-lg" data-toggle="modal" data-target="#addModal">
增加
</button>
<!-- 模态框(Modal) -->
<div class="modal fade" id="addModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">
×
</button>
<h4 class="modal-title" id="myModalLabel">
增加用戶信息
</h4>
</div>
<div class="modal-body">
<div>
<form class="form-horizontal" role="form" action="/add_user/" method="POST">
{% csrf_token %}
<div class="form-group">
<label for="firstname" class="col-sm-2 control-label">用户名</label>
<div class="col-sm-10">
<input type="text" class="form-control" name='account' id="firstname" placeholder="">
</div>
</div>
<div class="form-group">
<label for="lastname" class="col-sm-2 control-label">密码</label>
<div class="col-sm-10">
<input type="text" class="form-control" name='password' id="lastname" placeholder="">
</div>
</div>
<div class="form-group">
<label for="lastname" class="col-sm-2 control-label">姓名</label>
<div class="col-sm-10">
<input type="text" class="form-control" name="username" id="lastname" placeholder="">
</div>
</div>
<div class="form-group">
<label for="lastname" class="col-sm-2 control-label">生日</label>
<div class="col-sm-10">
<input type="text" name='birthday' class="form-control" id="birthday" placeholder="2020-06-02">
</div>
</div>
<div class="form-group">
<label for="lastname" class="col-sm-2 control-label">性別</label>
<div class="col-sm-10" >
<select class="form-control" name="sex">
<option>男</option>
<option>女</option>
</select></div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-default">添加</button>
<button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<body >
</body>
<script>
$(function(){
})
</script>
</html>
urls.py添加

运行

数据库数据

(2)查询
database.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>数据库测试</title>
<link rel="stylesheet" href="/static/css/bootstrap.min.css">
<script src="/static/js/jquery-1.11.3.min.js"></script>
<script src="/static/js/bootstrap.min.js"></script>
</head>
<button class="btn btn-primary btn-lg" data-toggle="modal" data-target="#addModal">
增加
</button>
<a href="/select_user">
查询
</a>
<!-- 模态框(Modal) -->
<div class="modal fade" id="addModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">
×
</button>
<h4 class="modal-title" id="myModalLabel">
增加用戶信息
</h4>
</div>
<div class="modal-body">
<div>
<form class="form-horizontal" role="form" action="/add_user/" method="POST">
{% csrf_token %}
<div class="form-group">
<label for="firstname" class="col-sm-2 control-label">用户名</label>
<div class="col-sm-10">
<input type="text" class="form-control" name='account' id="firstname" placeholder="">
</div>
</div>
<div class="form-group">
<label for="lastname" class="col-sm-2 control-label">密码</label>
<div class="col-sm-10">
<input type="text" class="form-control" name='password' id="lastname" placeholder="">
</div>
</div>
<div class="form-group">
<label for="lastname" class="col-sm-2 control-label">姓名</label>
<div class="col-sm-10">
<input type="text" class="form-control" name="username" id="lastname" placeholder="">
</div>
</div>
<div class="form-group">
<label for="lastname" class="col-sm-2 control-label">生日</label>
<div class="col-sm-10">
<input type="text" name='birthday' class="form-control" id="birthday" placeholder="2020-06-02">
</div>
</div>
<div class="form-group">
<label for="lastname" class="col-sm-2 control-label">性別</label>
<div class="col-sm-10" >
<select class="form-control" name="sex">
<option>男</option>
<option>女</option>
</select></div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-default">添加</button>
<button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<div style="width: 500px;">
<table class="table table-bordered">
<caption>用户信息</caption>
<thead>
<tr><td>账号</td><td>密码</td><td>用户名</td><td>生日</td><td>性别</td></tr>
</thead>
<tbody>
{% for i in all_user %}
<tr>
{% for j in i.values %}
<td>{{j}}</td>
{% endfor %}
</tr>
{% endfor %}
</tbody>
</table>
</div>
<body >
</body>
<script>
$(function(){
})
</script>
</html>
urls.py
"""FirstDjango URL Configuration The `urlpatterns` list routes URLs to views. For more information please see: https://docs.djangoproject.com/en/3.0/topics/http/urls/ Examples: Function views 1. Add an import: from my_app import views 2. Add a URL to urlpatterns: path('', views.home, name='home') Class-based views 1. Add an import: from other_app.views import Home 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') Including another URLconf 1. Import the include() function: from django.urls import include, path 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) """ from django.contrib import admin from django.urls import path from . import views,dbmode urlpatterns = [ path('admin/', admin.site.urls), path('', views.login), path('back_data/', views.get_data), path('form_commit.html/', views.form_commit_html), path('form_commit/', views.form_commit), path('form_commit_post/', views.form_commit_post), path('database.html/', dbmode.show_database_html), path('add_user/', dbmode.add_user), path('select_user/', dbmode.select_user), ]
dbmode.py
# -*- coding: utf-8 -*- from django.shortcuts import render from datetime import datetime from Model.models import user_info def show_database_html(request): return render(request, 'database.html') def add_user(request): data=dict() account = request.POST['account'] password = request.POST['password'] username = request.POST['username'] birthday = request.POST['birthday'] birthday=datetime.strptime(birthday,'%Y-%m-%d') sex = request.POST['sex'] user=user_info(account=account,password=password,username=username,birthday=birthday,sex=sex) ret=user.save() print('ret:{}'.format(ret)) data['ret']=ret return render(request, 'database.html',data) def select_user(request): all_user = user_info.objects.all() users=[] for user in all_user: one_user={} one_user['account']=user.account one_user['password']=user.password one_user['username']=user.username one_user['birthday']=str(user.birthday)[:11] one_user['sex']=user.sex users.append(one_user) data=dict() data['all_user']=users return render(request, 'database.html',data)
运行

(3) 修改,假设修改root的username
database.html
<a href="/update_user"> 修改 </a>
urls.py
path('update_user/', dbmode.update_user),
dbmode.py
def update_user(request): user = user_info.objects.get(account='root') user.username='root{}'.format(random.randint(1,10)) user.save() return render(request, 'database.html')
运行

数据库数据

(4)删除,假设删除admin1
database.html
<a href="/delete_user"> 删除 </a>
urls.py
path('delete_user/', dbmode.delete_user),
dbmode.py
def delete_user(request): user = user_info.objects.get(account='admin1') user.delete() return render(request, 'database.html')
运行

数据库

追加:
9、Q对象查询
q1 = Q() q1.connector = 'AND' q1.children.append(('age', 20)) q1.children.append(('sex', '男')) models.Table1.objects.filter(q1)
q1 = Q() q1.connector = 'OR' q1.children.append(('age', 18)) q1.children.append(('age', 20))
models.Table1.objects.filter(q1)
q = Q() q1 = Q() q1.connector = 'AND' q1.children.append(('age', 20)) q1.children.append(('sex', '男')) q2 = Q() q2.connector = 'OR' q2.children.append(('age', '18')) q2.children.append(('sex', '女')) q.add(q1, 'AND') q.add(q2, 'AND') models.Table1.objects.filter(q)
10、重定向
username = request.POST.get("username") password = request.POST.get("password") if username == 'admin' and password == 'admin': response = redirect("/index.html/") response.set_cookie("is_admin", True) elif username == 'root' and password == 'root': response = redirect("/index.html/") response.set_cookie("is_admin", False) else: response = redirect("/login.html/") # debug # response = redirect("/index.html/") return response
11、多个Model配置url
from django.contrib import admin from django.urls import path, include from CRUD import views urlpatterns = [ path('admin/', admin.site.urls), path('', views.login_html), path('login.html/', views.login_html), path('index.html/', views.index_html), path('debug/', views.debug), path('login/', views.login), path('one/', include('Model.urls')), path('two/', include('Model2.urls')) ]

浙公网安备 33010602011771号