zoukankan      html  css  js  c++  java
  • PythonWeb-Django框架学习-Demo3-使用ORM

    拿一个简单的例子来学习一下Django中的ORM:让用户输入个人信息,点击提交后以列表形式显示到下方。

    方法一:不使用数据库

    在视图处理函数中定义list对象,将从Request中接收到的信息,以字典形式添加到列表中,最后将list作为参数传递给render()函数。模板接收到数据后,遍历显示。

    视图处理:

    # recordinfo models.py
    from django.shortcuts import render, HttpResponse
    
    user_list = []
    
    
    # Create your views here.
    def index(myrequest):
        # return HttpResponse('我是首页,欢迎你。')
        # pamdict={'name':'博哥'}
        # return render(myrequest,'recordinfo/myindex.html',pamdict)
        if myrequest.method == 'POST':
            username = myrequest.POST.get('uname')
            userphone = myrequest.POST.get('uphone')
            print(username, userphone)
            temp = {'username': username, 'userphone': userphone}
            user_list.append(temp)
        return render(myrequest, 'recordinfo/myindex.html', {'datalist': user_list})

    模板文件:

    <!DOCTYPE html>
    <html>
    <head>
        <title>首页</title>
    </head>
    <body>
    <h1>欢迎来到信息登记页</h1>
    <p>用户输入:</p>
    <form action="{% url 'recordinfo:index' %}" method="post">
        {% csrf_token %}
        姓名:<input type="text" name="uname"><br/>
        电话:<input type="password" name="uphone"><br>
        <input type="submit" value="提交">
    </form>
    <p>用户列表:</p>
    <table border="1">
        <thead>
        <tr>姓名</tr>
        <tr>电话</tr>
        </thead>
        <tbody>
        {% for item in datalist %}
            <tr>
                <td>{{ item.username }}</td>
                <td>{{ item.userphone }}</td>
            </tr>
        {% endfor %}
        </tbody>
    </table>
    </body>
    </html>

    说明:{% csrf_token %} 是为了解决 Forbidden(403) CSRF verification failed.Request aborted。 这是一个因为跨域请求保护机制而报的错。只要我们在form标签中加上这行就行。

    静态文件:

    模板有了 但是我们要让模板变好看,有一些特效,得需要css、js这样的文件。

    1、在Django中,静态文件放在static文件夹中。

    static文件夹建在app下面,再在static下面建一个与app同名的文件夹,在上一步建好的文件夹下创建css文件。

    代码:

    p {
        color: green;
    }
    
    body {
        background: blueviolet url("images/bg.png");
    }

    说明:为了让页面更好看一些,还加了一个背景图。

    2、使用静态文件

    在myindex.html首部head标签内应用css文件。

    <!DOCTYPE html>
    <html>
    <head>
        <title>首页</title>
        {% load static %}
        <link rel="stylesheet" href="{% static 'recordinfo/mystyle.css' %}" type="text/css">
    </head>
    <body>
    <h1>欢迎来到信息登记页</h1>
    <p>用户输入:</p>
    <form action="{% url 'recordinfo:index' %}" method="post">
        {% csrf_token %}
        姓名:<input type="text" name="uname"><br/>
        电话:<input type="password" name="uphone"><br>
        <input type="submit" value="提交">
    </form>
    <p>用户列表:</p>
    <table border="1">
        <thead>
        <tr>姓名</tr>
        <tr>电话</tr>
        </thead>
        <tbody>
        {% for item in datalist %}
            <tr>
                <td>{{ item.username }}</td>
                <td>{{ item.userphone }}</td>
            </tr>
        {% endfor %}
        </tbody>
    </table>
    </body>
    </html>

    3、运行效果:

    项目目录:

    以上是没有使用数据库的情况,当我们服务器重启,这些输入数据就直接消失了,所以我们得想办法把这些数据保存到数据库中,专业名词叫:持久化。

    方法二:使用数据库

    1、注册应用

    在开始之前我们应该确认我们是否在settings.py注册了我们的app:告诉django,将来要给哪个app创建数据库表。

     2、配置数据库

    Django默认给我们设置的数据库类型是Sqlite:Sqlite数据库轻,免密码。减轻一下学习成本,暂且不去修改数据库配置项。

     3、编写模型

    Django将继承自models的类,与数据库中的表进行映射。Django自动会为我们创建表和字段。我们在应用(recordeinfo)的models.py中写入模型类

    from django.db import models
    
    # Create your models here.
    class User(models.Model):
        username = models.CharField(max_length=50)
        userphone = models.CharField(max_length=11)

    4、记录模型变更、根据模型创建数据库表

    I:记录模型变动

    使用  python manage.py makemigrations recordinfo 会在recordinfo应用的migrations目录中 生成一个0001_initial.py 迁移记录文件

     说明:打开迁移记录文件 可以看到 django为我们生成了一个建表操作。

    II:操作数据库

    执行真正的数据库表操作:python manage.py migrate

     III:重新编辑views.py 将逻辑改为与数据库进行交互

    from django.shortcuts import render, HttpResponse
    from recordinfo.models import User
    
    user_list = []
    
    
    def index(myrequest):
        if myrequest.method == 'POST':
            user_name = myrequest.POST.get('uname')
            user_phone = myrequest.POST.get('uphone')
            print(user_name, user_phone)
            # 保存到数据库中 create相当于SQL里面的insert语句
            User.objects.create(username=user_name, userphone=user_phone)
        user_list = User.objects.all()  # 从数据库中查出所有数据
        return render(myrequest, 'recordinfo/myindex.html', {'datalist': user_list})

    IV:运行

     V:项目目录

    VI:关于python manage.py makegrations recordinfo和python manage.py migrate 这两个命令

    I:如果使用 cmd 命令 需要进入到项目的根目录下

     II:如果你像我一样使用的是pycharm 这款编辑器 那么选择下方的Terminal即可

  • 相关阅读:
    C# 使用HttpWebRequest Post提交数据,携带Cookie和相关参数示例
    关于vue的页面跳转后,如何每次进入页面时都能获取后台数据
    关于vue的页面跳转后,如何每次进入页面时都能获取后台数据
    C#根据汉字获取编码和根据编码获取汉字
    C#根据汉字获取编码和根据编码获取汉字
    多线程系列教材 (一)- Java 创建一个线程的三种方式
    Lambda系列教材 (三)- java 集合的聚合操作
    Lambda系列教材 (二)- 方法引用
    Lambda系列教材 (一)- Java Lambda 表达式教程
    泛型系列教材 (四)- Java 中的子类泛型 转型 成父类泛型
  • 原文地址:https://www.cnblogs.com/bigbosscyb/p/12491485.html
Copyright © 2011-2022 走看看