Python Django學習之資料庫
阿新 • • 發佈:2020-08-01
接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.cnblogs.com/rainbow-tan/p/13385754.html
安裝命令
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>View Code
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')
執行
資料庫