• Django Model模型的实战操作笔记


    Model模型的实战操作笔记

    1. 创建数据库和表

    • 进入MySQL数据库创建数据库:mytest
    • 进入数据库创建数据表:mytest_users

      CREATE TABLE `mytest_users` (                          
        `id` int(10) unsigned NOT NULL AUTO_INCREMENT,       
        `name` varchar(32) NOT NULL,                         
        `age` tinyint(3) unsigned NOT NULL DEFAULT '20',     
        `phone` varchar(16) DEFAULT NULL,                    
        PRIMARY KEY (`id`)                                   
      ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
      
    • 添加几条测试数据

    2. 创建项目demo和应用mytest

    # 创建项目框架demo
    $ django-admin startproject demo
    
    $ cd demo
    
    # 在项目中创建一个mytest应用
    $ python3.6 manage.py startapp mytest
    
    # 创建模板目录
    $ mkdir templates
    $ mkdir templates/mytest
    
    $ cd ..
    
    $ tree demo
    
    demo
    ├── demo
    │   ├── __init__.py
    │   ├── settings.py
    │   ├── urls.py
    │   └── wsgi.py
    ├── manage.py
    ├── mytest
    │   ├── admin.py
    │   ├── apps.py
    │   ├── __init__.py
    │   ├── models.py
    │   ├── tests.py
    │   └── views.py
    └── templates
        └── mytest
    

    3. 执行数据库连接配置,网站配置

    3.1 编辑demo/demo/__init__.py文件,添加Pymysql的数据库操作支持

    import pymysql
    pymysql.install_as_MySQLdb()
    

    3.2 编辑demo/demo/settings.py文件,配置数据库连接

    ...
    #配置自己的服务器IP地址
    ALLOWED_HOSTS = ['192.168.103.240']
    
    ...
    #添加自己应用
    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'mytest',
    ]
    ...
    
    # 配置模板路径信息
    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [os.path.join(BASE_DIR,'templates')],
            'APP_DIRS': True,
            'OPTIONS': {
                'context_processors': [
                    'django.template.context_processors.debug',
                    'django.template.context_processors.request',
                    'django.contrib.auth.context_processors.auth',
                    'django.contrib.messages.context_processors.messages',
                ],
            },
        },
    ]
    
    
    ...
    # 数据库连接配置
    DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'mydb',
        'USER': 'root',
        'PASSWORD': '123456',
        'HOST': 'localhost',
        'PORT': '3306',
    }
    ...
    

    4. 定义Model类

    4.1 编辑demo/mytest/models.py

    from django.db import models
    
    
    class Users(models.Model):
        name = models.CharField(max_length=32)
        age = models.IntegerField(default=20)
        phone = models.CharField(max_length=16)
    
        def __str__(self):
            return self.name+":"+self.phone
    

    4.2 测试Model类的使用

    在项目根目录下执行命令: python3.6 manage.py shell

    [root@localhost demo]# ls
    demo  manage.py  mytest
    
    [root@localhost demo]#  python3.6 manage.py shell
    Python 3.6.1 (default, Jul 18 2017, 01:35:19) 
    [GCC 4.4.7 20120313 (Red Hat 4.4.7-18)] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    (InteractiveConsole)
    
    >>> from mytest.models import Users
    
    >>> Users.objects.all()
    <QuerySet [<Users: 张三:12345678901>, <Users: aa:13456789023>]>
    
    >>> s = Users.objects.get(id=1)
    
    >>> s.id
    1
    
    >>> s.name
    '张三'
    
    >>> s.age
    20
    
    >>> s.phone
    '12345678901'
    
    >>>
    

    5. 实现Web端访问

    5.1 编辑demo/demo/settings.py文件.做 ALLOWED_HOSTS 主机访问配置(若第三步已做可跳过此步骤)

    #此处添加自己的IP地址
    ALLOWED_HOSTS = ['192.168.2.240']
    

    5.2 编写项目主路由urls配置,配置对mytest应用路由的访问连接配置

    from django.conf.urls import include,url
    from django.contrib import admin
    
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^mytest/', include('mytest.urls')),
    ]
    

    5.3 配置当前应用mytest的路由配置

    在mytest应用目录下创建一个路由文件urls.py文件,注意此文件编码为utf-8(建议复制一个)。

    编辑应用中的路由配置文件:demo/mytest/urls.py, 内容如下:

    from django.conf.urls import url
    
    from . import views
    
    urlpatterns = [
        url(r'^$', views.index, name="index"),
    ]
    

    5.4 编辑视图文件:demo/mytest/views.py,内容如下

    #from django.shortcuts import render
    from django.http import HttpResponse
    
    from mytest.models import Users
    
    def index(request):
        try:
            s = Users.objects.get(id=1)
            return HttpResponse(s)
        except:
            return HttpResponse("没有找到对应的信息!")
    

    5.5 测试

    项目根目录下运行python3.6 manage.py sunserver 0:8000命令,开启服务:

    [root@localhost demo]# python3.6 manage.py runserver 0:8000
    Performing system checks...
    
    System check identified no issues (0 silenced).
    
    July 28, 2017 - 14:01:52
    Django version 1.11, using settings 'demo.settings'
    Starting development server at http://0:8000/
    Quit the server with CONTROL-C.
    

    打开浏览器,在浏览其中输入网址测试:http://192.168.2.240:8000/mytest/

    显示结果:张三:12345678901

    继续上面操作完成Web版的Users信息增 删 改 查

    1. 准备模板文件,创建模板目录

    1. 在项目目录下创建templates模板目录
    2. 进入模板目录templates,在模板目录下创建应用名mytest的目录
    3. 进入mytest目录,在里面创建一个users目录
    4. 进入users目录,在里面创建文件:index.html,add.html,edit.html,menu.html,info.html
    5. 设置模板目录信息:编辑demo/demo/settings.py文件(若第三步已做可跳过此步骤)
    ...
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR,'templates'),],
        'APP_DIRS': True,
    ...
    

    2. 配置路由信息

    打开文件:demo/mytest/urls.py路由文件,加入六条路由配置信息

    from django.conf.urls import url
    
    from . import views
    
    urlpatterns = [
        url(r'^$', views.index, name="index"),
        url(r'^users$', views.indexUsers, name="users"), #浏览用户信息
        url(r'^users/add$', views.addUsers, name="addusers"), #加载添加用户信息表单
        url(r'^users/insert$', views.insertUsers, name="insertusers"), #执行用户信息添加
        url(r'^users/(?P<uid>[0-9]+)/del$', views.delUsers, name="delusers"), #执行用户信息删除
        url(r'^users/(?P<uid>[0-9]+)/edit$', views.editUsers, name="editusers"), #加载用户信息编辑表单
        url(r'^users/update$', views.updateUsers, name="updateusers"), #执行用户信息编辑
    ]
    

    3. 编写视图文件:demo/mytest/views.py

    # 注意:需导入from django.shortcuts import render
    
    from django.shortcuts import render
    from django.http import HttpResponse
    
    from mytest.models import Users
    
    def index(request):
        try:
            list = Users.objects.filter(id__in=[1,3,5])
            s = ','.join([vo.name for vo in list])
    
            #修改(将id值为5的age值改为30)
            #ob = Users.objects.get(id=5)
            #ob.age = 30
            #ob.save()
    
            #删除(删除id为3的信息)    
            #ob = Users.objects.get(id=3)
            #ob.delete()
    
            return HttpResponse(s)
        except:
            return HttpResponse("没有找到对应的信息!")
    
    # 浏览用户信息        
    def indexUsers(request):
        # 执行数据查询,并放置到模板中
        list = Users.objects.all()
        context = {"stulist":list}
        return render(request,"mytest/users/index.html",context)
    
    # 加载添加信息表单
    def addUsers(request):  
        return render(request,"mytest/users/add.html")
    
    # 执行信息添加操作
    def insertUsers(request): 
        try:
            ob = Users()
            ob.name = request.POST['name']
            ob.age = request.POST['age']
            ob.phone = request.POST['phone']
            ob.save()
            context = {'info':'添加成功!'}
        except:
            context = {'info':'添加失败!'}
        return render(request,"mytest/users/info.html",context)
    
    # 执行信息删除操作    
    def delUsers(request,uid):  
        try:
            ob = Users.objects.get(id=uid)
            ob.delete()
            context = {'info':'删除成功!'}
        except:
            context = {'info':'删除失败!'}
        return render(request,"mytest/users/info.html",context)
    
    # 加载信息编辑表单    
    def editUsers(request,uid):  
        try:
            ob = Users.objects.get(id=uid)
            context = {'user':ob}
            return render(request,"mytest/users/edit.html",context)
        except:
            context = {'info':'没有找到要修改的信息!'}
            return render(request,"mytest/users/info.html",context)
    
    # 执行信息编辑操作
    def updateUsers(request):
        try:
            ob = Users.objects.get(id= request.POST['id'])
            ob.name = request.POST['name']
            ob.age = request.POST['age']
            ob.phone = request.POST['phone']
            ob.save()
            context = {'info':'修改成功!'}
        except:
            context = {'info':'修改失败!'}
        return render(request,"mytest/users/info.html",context)
    

    4. 编辑浏览信息视图文件:

    文件位置:demo/templates/mytest/users/index.html

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8"/>
            <title>用户信息管理</title>
            <script>
                //自定义执行信息删除提示判断,参数uu是成功的删除url地址
                function doDel(uu){
                    if(confirm("确定要删除吗?")){
                        //网页跳转
                        window.location=uu;
                    }
                }
    
            </script>
        </head>
        <body>
            <center>
    
                { % include 'mytest/users/menu.html' % }
    
                <h3>浏览用户信息</h3>
                <table width="800" border="1">
                    <tr>
                        <th>id号</th>
                        <th>姓名</th>
                        <th>年龄</th>
                        <th>电话</th>
                        <th>操作</th>
                    </tr>
                    { % for stu in stulist % }
                        <tr>
                            <td></td>
                            <td></td>
                            <td></td>
                            <td></td>
                            <td>
                                <a href="{ % url 'editusers' stu.id % }">编辑</a>
                                <a href="javascript:doDel('{ % url 'delusers' stu.id % }');">删除</a>
                            </td>
                        </tr>
                    { % endfor % }
                </table>
            </center>
        </body>
    </html>
    

    5. 编辑添加表单视图文件

    文件位置:demo/templates/mytest/users/add.html

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8"/>
            <title>用户信息管理</title>
        </head>
        <body>
            <center>
                { % include "mytest/users/menu.html" % }
    
                <h3>添加用户信息</h3>
                <form action="{ % url 'insertusers' % }" method="post">
                { % csrf_token % }
                <table width="280" border="0">
                   <tr>
                     <td>姓名:</td>
                     <td><input type="text" name="name"/></td>
                   </tr>
                   <tr>
                     <td>年龄:</td>
                     <td><input type="text" name="age"/></td>
                   </tr>
                   <tr>
                     <td>电话:</td>
                     <td><input type="text" name="phone"/></td>
                   </tr>
                   <tr>
                     <td colspan="2" align="center">
                        <input type="submit" value="添加"/>
                        <input type="reset" value="重置"/>
                     </td>
                   </tr>
                </table>
                </form>
            </center>
        </body>
    </html>
    

    6. 编辑信息表单视图文件

    文件位置:demo/templates/mytest/users/edit.html

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8"/>
            <title>用户信息管理</title>
        </head>
        <body>
            <center>
                { % include "mytest/users/menu.html" % }
                <h3>修改用户信息</h3>
                <form action="{ % url 'updateusers' % }" method="post">
                <input type="hidden" name="id" value=""/>
                { % csrf_token % }
                <table width="280" border="0">
                   <tr>
                     <td>姓名:</td>
                     <td><input type="text" name="name" value=""/></td>
                   </tr>
                   <tr>
                     <td>年龄:</td>
                     <td><input type="text" name="age"  value=""/></td>
                   </tr>
                   <tr>
                     <td>电话:</td>
                     <td><input type="text" name="phone" value=""/></td>
                   </tr>
                   <tr>
                     <td colspan="2" align="center">
                        <input type="submit" value="编辑"/>
                        <input type="reset" value="重置"/>
                     </td>
                   </tr>
                </table>
                </form>
            </center>
        </body>
    </html>
    

    7. 编辑公共导航栏页视图文件

    文件位置:demo/templates/mytest/users/menu.html

    <h2>用户信息管理</h2>
    <a href="{ % url 'users' % }">浏览用户</a> |
    <a href="{ % url 'addusers' % }">添加用户</a>
    <hr/>
    

    文件位置:demo/templates/mytest/users/info.html

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8"/>
            <title>用户信息管理</title>
        </head>
        <body>
            <center>
                { % include "mytest/users/menu.html" % }
    
                <h3></h3>
    
            </center>
        </body>
    </html>
    
  • 相关阅读:
    Tomcat6.0的Thisisverylikelytocreateamemoryleak异常
    一个不错的能将HTML表格导出为excel,pdf等的jquery插件
    关于tomcat8在windows2008下高并发下问题的解决方案
    应用部署到JBOSS上遇到的问题
    [置顶] 将项目从tomcat 迁移到JBoss
    struts2 if标签示例
    用Java集合中的Collections.sort方法对list排序的两种方法
    SAP 关于标准成本、计划成本、目标成本、实际成本
    “癌症村”里的“净水神器”
    iis虚拟目录引发的路径问题
  • 原文地址:https://www.cnblogs.com/Fantinai/p/8298867.html
Copyright © 2020-2023  润新知