diango使用数据库

之前写的页面,虽然和用户交互得很好,但并没有保存任何数据,页面一旦关闭,或服务器重启,一切都将回到原始状态。

使用数据库是毫无疑问的,django通过自带的ORM框架操作数据库,并且自带轻量级的sqlite3数据库。

我不想使用自带的数据库,就是要使用MySQL。这里,我已经安装好了MySQL,并且启动了。

windows版的MySQ安装,请参考以下文章

https://www.cnblogs.com/xiao987334176/p/9167038.html

linux版的MySQ安装,请参考以下文章

http://www.py3study.com/Article/details/id/296.html

首先是注册app:

修改mysite下的settings.py文件,注册你的app。最后一行添加,我用的app名是blog

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'blog',
]

不注册它,你的数据库就不知道该给哪个app创建表。

然后我们在settings中,配置数据库相关的参数,如果使用自带的sqlite,不需要修改。

DATABASES = {
    # 'default': {
    #     'ENGINE': 'django.db.backends.sqlite3',
    #     'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    # }
    'default': {
        'ENGINE': 'django.db.backends.mysql',   # 数据库引擎mysql
        'NAME': 'db2',       # 你要存储数据的库名,事先要创建之
        'USER': 'root',      # 数据库用户名
        'PASSWORD': '',      # 密码
        'HOST': 'localhost', # 主机
        'PORT': '3306',      # 数据库使用的端口
    }
}

再编辑blog目录下的models.py文件,也就是MTV中的M。

from django.db import models

# Create your models here.
#必须要继承models.Model类,这个固定写法。这里表示创建表Users
class Users(models.Model):
    #创建username字段,类似是varchar,最大长度是20
    username = models.FileField(max_length=20)
    password = models.FileField(max_length=32)
    email = models.FileField(max_length=30)

这里我们创建了3个字段,分别保存用户的名字、密码、邮箱。

接下来要在pycharm的teminal中通过命令创建数据库的表了。有2条命令,分别是:

python manage.py makemigrations

它的作用相当于 在该app下建立 migrations目录,并记录下你所有的关于modes.py的改动,比如0001_initial.py, 但是这个改动还没有作用到数据库文件

再输入命令:

python manage.py migrate

它是将该改动作用到数据库文件,比如创建表,修改表字段之类的操作。

修改mysite目录下的urls.py,删除不用的路由

from django.contrib import admin
from django.urls import path
from blog import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('userInfo/', views.userInfo),
]

修改blog目录下的views.py文件,改动里面业务逻辑,完整代码如下:

from django.shortcuts import render,HttpResponse
from blog import models

def userInfo(req):
    #判断请求类型
    if req.method == "POST":
        #获取表单数据,如果获取不到,则为None
        user = req.POST.get("username",None)
        pwd = req.POST.get("password", None)
        email = req.POST.get("email", None)
        #create是django内部封装的方法,用来插入一条数据
        #添加数据到数据库中,等式左边是数据库字段,等式右边是从用户那里接受的数据
        models.Users.objects.create(username=user,password=pwd,email=email)
    #从数据库读取所有的行,返回一个对象
    user_list = models.Users.objects.all()
    print(type(user_list))
    # 将对象传给模板index.html
    return render(req, "index.html", {"user_list": user_list})

修改templates下的index.html,代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="/userInfo/" method="post">
    <p>姓名<input type="text" name="username"/></p>
    <p>密码<input type="text" name="password"/></p>
    <p>邮箱<input type="text" name="email"/></p>
    <p><input type="submit" value="提交"/></p>
</form>

{#判断列表有数据的情况下#}
{% if user_list %}
    <hr/>
    <h1>数据展示</h1>
    {#border-collapse属性显示细线表格#}
 <table border="1" cellspacing="0" bordercolor="#000000" style="border-collapse:collapse;">
        <tr>
            <td>姓名</td>
            <td>密码</td>
            <td>邮箱</td>
        </tr>
        {#使用for循环遍历列表#}
 {% for i in user_list %}
            <tr>
                {#展示数据#}
 <td>{{i.username}}</td>
                <td>{{i.password}}</td>
                <td>{{i.email}}</td>
            </tr>
        {#结束for循环#}
 {% endfor %}
    </table>
{#一定要写结束符#}
{% endif %}

</body>
</html>

最后还要安装2个模块,否则重启web项目时,提示找不到mysqlclient

pip3 install pymysql

pip3 install mysqlclient

关闭pycharm,再次启动pycharm,启动mysite项目

访问页面

http://127.0.0.1:8000/userInfo/

点击提交按钮,下面就有数据展示

使用navicat软件连接MySQL,查看表数据

之后和用户交互的数据都能保存到数据库中。任何时候都可以从数据库中读取数据,展示到页面上。

至此,一个要素齐全,主体框架展示清晰的django项目完成了,其实很简单是不是?

Django总结

作为python必学web框架的Django,它的功能强大,内容全面,但同时也意味着限制颇多,灵活性低,可修改性差,这就是鱼和熊掌不可兼得了。我们学习Django,其实就是学习一个软件,要理解它的基本原理,把握它整体框架,牢记一些基本规则,剩下的就是不断深入细节,然后熟能生巧、经验多少的问题了,不存在多高深的不可掌握技术。

关于学习方法的建议:学习任何东西,不要直接扎入细节,应该先了解它的外围知识,看看它的整体架构,再学习它的基本内容,然后才是深入学习,打磨技巧!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Python攻城狮

Django教程(一)- Django视图与网址1.简介2.环境搭建3.安装pycharm4.Ubuntu下 正确安装VMware Tools5.Django主要模块6.Django基本命令7. Dj

Django 是用Python开发的一个免费开源的Web框架,可以用于快速搭建高性能,优雅的网站!

1552
来自专栏jiajia_deng

使用七牛云对象储存缓存 wordpress 静态文件加速网站

2673
来自专栏祝威廉

StreamingPro 支持类SQL DSL

受spark sql在喜马拉雅的使用之xql 这篇文章影响,我发现类似下面这种语法是极好的:

751
来自专栏数据和云

你造吗,Oracle SQLplus 也有History命令了

很多时候我们只能通过SQLPlus来操作数据库,而当一个SQL执行结果太多时,我们要回翻之前的SQL语句就会很麻烦,甚至可能由于ssh客户端或SQLPlus客户...

3295
来自专栏惨绿少年

Grafana数据可视化

一个类似Kibana的东西,也是对后端的数据进行实时展示,那么Grafana和Kibana有什么区别?在我看来区别不大,不过在大家的日常使用中Kibana是跟着...

5.4K2
来自专栏云计算教程系列

如何在CentOS 7上使用OTRS设置帮助台系统

OTRS是一个开源的票证请求系统。它为用户,客户,IT人员,IT服务和任何外部组织提供单点联系。该程序是用Perl编写的,支持各种数据库(MySQL,Postg...

9384
来自专栏建站达人秀

如何搭建 LAMP 网站服务环境

Linux+Apache+Mysql/MariaDB+Perl/PHP/Python一组常用来搭建动态网站或者服务器的开源软件,本身都是各自独立的程序,但是因为...

5535
来自专栏云计算教程系列

如何在Ubuntu 16.04上安装Moodle

Moodle是一个流行的,开源的基于Web的学习管理系统(LMS),任何人都可以免费安装和使用。通过Moodle,您可以为学习者群体创建和提供课程,阅读和讨论板...

3370
来自专栏向治洪

github pages + Hexo + 域名绑定搭建个人博客

环境 Windows 10(64 位) Git-2.7.4-64-bit  node-v4.4.7-x64 如果上述软件已经安装的,跳过,没有安装的下载安...

99310
来自专栏FreeBuf

闲聊Windows系统日志

最近遇到不少应急都提出一个需求,能不能溯源啊?这个事还真不好干,你把证据,犯案时间都确定的时候,要求翻看监控(日志)对应犯罪嫌疑人时,突然说监控(日志)没有记录...

1.1K0

扫码关注云+社区

领取腾讯云代金券