Django_简单的数据库交互案例

Posted justin-tim

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django_简单的数据库交互案例相关的知识,希望对你有一定的参考价值。

https://www.jianshu.com/p/bd0af02e59ba

 

一、页面展示

做一个简单的数据库交换的练习案例


 
技术分享图片
页面.png

二、创建mysql

(1)创建django
(2)创建app文件python mange.py startapp cmdb
(3)创建数据库,在project同名的配置的 init.py文件中配置mysql连接

import pymysql
pymysql.install_as_MySQLdb() 

(4)在setting.py 中配置mysql 连接,找到DATABASES

DATABASES = {
    ‘default‘: {
        ‘ENGINE‘: ‘django.db.backends.mysql‘,
        ‘NAME‘: ‘testuser‘,
        ‘USER‘:‘root‘,
        ‘PASSWORD‘:‘root‘,
        ‘HOST‘:‘localhost‘,
        ‘PORT‘: ‘3306‘,
    }
}

(5)在setting文件下配置INSTALLED_APPS加入cmdb模块

INSTALLED_APPS = [
    ‘django.contrib.admin‘,
    ‘django.contrib.auth‘,
    ‘django.contrib.contenttypes‘,
    ‘django.contrib.sessions‘,
    ‘django.contrib.messages‘,
    ‘django.contrib.staticfiles‘,
    ‘cmdb‘,
]

(6)根据CODEFIRST创建表,在app models.py 创建类

from django.db import models

# Create your models here.
class user_info(models.Model):
    username = models.CharField(max_length=32)
    password = models.CharField(max_length=64)

(7)创建新的迁移策略文件python manage.py makemigrations
(8)生成数据库表python manage.py migrate

三、url 配置

(1)在project 文件的url配置,url分发,分发到指定的app

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

urlpatterns = [
    url(r‘^admin/‘, admin.site.urls),
    url(r‘cmdb/‘, include(‘cmdb.urls‘))
]

(2)在指定的app文件下创建urls.py文件

from django.conf.urls import url,include
from cmdb import views
urlpatterns = [
    #登陆url
    url(r‘login‘, views.login),
    #主界面展示url
    url(r‘index‘, views.index),
    #展示所用户信息url
    url(r‘user_info‘, views.user_info),
    #展示个人信息的url
    url(r‘user-(?P<nid>d+)‘,views.user_per),
    #删除个人信息的url
    url(r‘delete-(?P<nid>d+)‘,views.user_delete),
]

四、views 层逻辑编写
(1)登陆主要用到了models.user_info.objects.filter(username=u, password=p).first()

def login(request):
    if request.method == ‘GET‘:
        return render(request,‘login.html‘,{‘msg‘:‘‘})
    elif request.method == ‘POST‘:
        u = request.POST.get(‘user‘,None)
        p = request.POST.get(‘pwd‘,None)
        if u and p :
            #select * from cmdb_user_info where username=u password=p
            obj = models.user_info.objects.filter(username=u, password=p).first()
            if obj:
                #重定向到cmdb/index url 上,url分发到index方法上
                return redirect(‘/cmdb/index‘)
            else:
                msg = ‘用户名密码错误‘
                return render(request,‘login.html‘,{‘msg‘:msg})
        else:
            return render(request, ‘login.html‘, {‘msg‘: ‘‘})

(2)主页面展示

def index(request):
    return render(request,‘index_u.html‘)

(3)用户信息的增加/展示
主要用到了

#select * from cmdb_user_info
obj = models.user_info.objects.all()

#inster into cmdb_user_info(username,password) values(u,p)
models.user_info.objects.create(username=u,password=p)
def user_info(request):
    if request.method == ‘GET‘:
        #select * from cmdb_user_info
        obj = models.user_info.objects.all()
        return render(request,‘index.html‘,{‘user‘:obj})
    elif request.method == ‘POST‘:
        u = request.POST.get(‘user‘)
        p = request.POST.get(‘pwd‘)
        #inster into cmdb_user_info(username,password) values(u,p)
        models.user_info.objects.create(username=u,password=p)
        return redirect(‘/cmdb/user_info‘)

(4)删除
主要用到

 #删除 delete from 表 where id=2
 obj = models.user_info.objects.filter(id=nid).delete()
def user_delete(request, nid):
    #删除 delete from 表 where id=2
    obj = models.user_info.objects.filter(id=nid).delete()
    return redirect(‘/cmdb/user_info‘)

四、templates
(1)login页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="{{ request.path_info }}" method="post">
    <input type="text" name="user">
    <input type="password" name="pwd">
    <span>{{ msg }}</span>
    <input type="submit">
</form>
</body>
</html>

(2)index 页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>

          body{
            margin: 0;
        }
        .header{
            height: 48px;
            background-color: aquamarine;
            color: white;
        }
        .conleft{
            position: absolute;
            top: 48px;
            width: 200px;
            left: 0;
            bottom: 0;
            background-color:chocolate;
        }
        .conright{
            position: absolute;
            left: 200px;
            bottom: 0px;
            right: 0px;
            top: 48px;
            overflow: auto;
            background-color: burlywood;
        }
    </style>
</head>
<body>
<div class="header">欢迎</div>
<div class="con">
    <div class="conleft">
        <a href="/cmdb/user_info">用户管理</a>
    </div>
    <div class="conright">

    </div>
</div>
<div></div>
</body>
</html>

(3)用户信息展示页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>

          body{
            margin: 0;
        }
        .header{
            height: 48px;
            background-color: aquamarine;
            color: white;
        }
        .conleft{
            position: absolute;
            top: 48px;
            width: 200px;
            left: 0;
            bottom: 0;
            background-color:chocolate;
        }
        .conright{
            position: absolute;
            left: 200px;
            bottom: 0px;
            right: 0px;
            top: 48px;
            overflow: auto;
            background-color: burlywood;
        }
    </style>
</head>
<body>
<div class="header">欢迎</div>
<div class="con">
    <div class="conleft">
        <a href="/cmdb/user_info">用户管理</a>
    </div>
    <div class="conright">
        <form action="{{ request.path_info}}" method="post">
            <input type="text" name="user">
            <input type="text" name="pwd">
            <input type="submit" >
        </form>
        {% for i in user %}
            <a href="/cmdb/user-{{ i.id }}">{{ i.username }}
            <a href="/cmdb/delete-{{ i.id }}">删除</a>

            <br>
        {% endfor %}
    </div>
</div>
<div></div>
</body>
</html>

(4)个人信息更改页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>

          body{
            margin: 0;
        }
        .header{
            height: 48px;
            background-color: aquamarine;
            color: white;
        }
        .conleft{
            position: absolute;
            top: 48px;
            width: 200px;
            left: 0;
            bottom: 0;
            background-color:chocolate;
        }
        .conright{
            position: absolute;
            left: 200px;
            bottom: 0px;
            right: 0px;
            top: 48px;
            overflow: auto;
            background-color: burlywood;
        }
    </style>
</head>
<body>
<div class="header">欢迎</div>
<div class="con">
    <div class="conleft">
        <a href="/cmdb/user_info">用户管理</a>
    </div>
    <div class="conright">
        <p>用户信息</p>
        <form action="{{ request.path_info }}" method="post">
        <input type="text" value="{{ i.username }}" name="user">-
        <input type="text" value="{{ i.password }}" name="pwd">
        <input type="submit">编辑</a>
        </form>
    </div>
</div>
<div></div>
</body>
</html>


作者:两点半的杂货铺
链接:https://www.jianshu.com/p/bd0af02e59ba
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。













以上是关于Django_简单的数据库交互案例的主要内容,如果未能解决你的问题,请参考以下文章

django怎么模糊匹配json中的数据?

如何使用与同一数据库交互的外部 python 包来构建 Django 项目

基于Django开发一个BBS案例

(Django)气流中的 ORM - 有可能吗?

一 . Vue+Django 前后端数据交互知识点

Django中模型