快速入门Django(在网页写入内容,并将其显示在另一网页)

在熟悉了官网的操作以后,用个例子来练习把

本文能够实现的功能:
创建数据库,在网页输入信息,并在另一个网页中显示出来。

本文参考了两个博客,自己做了些改动,附上原博客链接:
是https://blog.****.net/qy20115549/article/details/78439693#t1
和https://blog.****.net/qq_34081993/article/details/79229784

插个楼,网上看到的流程图,觉得不错:

Django流程图

快速入门Django(在网页写入内容,并将其显示在另一网页)

  1. 用户通过浏览器请求页面
  2. 请求到达请求中间件,可以接受或拒绝请求
  3. URLConf通过urls.py文件和请求的URL找到相应的View
  4. View Middlewares被访问,它同样可以对request做一些处理或者直接返回response。
  5. 调用View中的函数。
  6. View中的方法可通过Models访问底层的数据
  7. 所有的Model-to-DB的交互都是通过manager完成的
  8. 如果需要,Views可以使用一个特殊的Context
  9. Context被传给Template用来生成页面

a. Template使用Filters和Tags去渲染输出
b. 输出被返回到View
c. HTTPResponse被发送到Response Middlewares
d. 任何Response Middlewares都可以丰富response或者返回一个完全不同的response
e. Response返回到浏览器,呈现给用户

OK,办正事

1.项目创建

进入命令行窗口,通过 cd 切换到自己的工作目录,创建一个项目 myweb

django-admin startproject myweb

可以看到,在目录下会多出一个文件夹 myweb,表示项目创建成功。

2.启动 Django 服务

cd 进入myweb 目录,现在在命令提示符中输入命令:

python manage.py runserver

现在,Web 服务器已经成功启动,打开浏览器,在地址栏中输入:http://127.0.0.1:8000/
“127.0.0.1” 是指本地主机,8000 是默认的服务端口,可修改。

OK 创建完成

3.创建 Django APP

建立一个叫 「myapp」 的应用,保持命令提示符在 myweb 目录下,
首先退出刚刚启动起来的 Web 服务器(注:Ctrl+C 可以退出服务器,Ctrl+Break也行),执行如下命令:

python manage.py startapp myapp

回车后, myweb 文件夹中多了一个 myapp 文件夹,这个就是我们刚创建的 APP
myapp 中为我们创建了相关的应用文件。

model

首先,需要写model,即你需要操作的数据。

from __future__ import unicode_literals
from django.db import models
# Create your models here.

class message(models.Model):
    username = models.CharField(max_length=1000)
    password = models.CharField(max_length=1000)

settings.py中添加APP

INSTALLED_APPS = [
    'polls.apps.PollsConfig',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    
    'myapp',  # 在这里添加这一行代码
]

settings.py中修改:

DEBUG = True

ALLOWED_HOSTS = ['*']

使用默认database

若是想更换MySQL其他也可以,这里使用默认的数据库

创建数据库

请记住进行模型更改的三步指南:

  1. 更改模型 models.py
  2. 运行以创建这些更改的迁移***python manage.py makemigrations***
  3. 运行以将这些更改应用于数据库。python manage.py migrate
    如下:
python manage.py makemigrations
python manage.py migrate

views.py

from __future__ import unicode_literals
from myapp import models
from django.shortcuts import render

 #插入函数
def insert(request):
    if request.method == "POST":
        username = request.POST.get("username", None)
        password = request.POST.get("password", None)
        twz = models.message.objects.create(username=username, password=password)
        twz.save()
    return render(request,'insert.html')


#定义展示函数
def list(request):
    people_list = models.message.objects.all()
    return render(request, 'show.html', {"people_list":people_list})

insert.html

在myapp目录下,建立templates文件夹,并在templates文件夹中建立insert.html,show.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>输入</title>
</head>
<body>
    <h1>信息输入</h1>
    <form action="/insert/" method="post"> {% csrf_token %}
        <th>用户名字:</th>
        <input type="text" name="username"/>

        <br>
        <th>病情描述:</th>
        <input type="password" name="password"/>
        <input type="submit" value="提交">
    </form>
</body>
</html>

show.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>输出</title>
</head>
<body>
    <h1>信息输出</h1>
    <table>
    <tr>
        <th>用户名:</th>
        <th>治疗方案:</th>
    </tr>
    {% for line in people_list %}
    <tr>
        <td>{{line.username}}</td>
        <td>{{line.password}}</td>
    </tr>
    {% endfor %}
    </table>
</body>
</html>

urls.py

from django.contrib import admin
from django.conf.urls import url
from myapp import views # 在这里添加这一行代码,导入 views

urlpatterns = [
    url(r'^insert/$',views.insert),
    url(r'^show/$',views.list),
    url(r'^admin/', admin.site.urls),
]

运行结果

快速入门Django(在网页写入内容,并将其显示在另一网页)
快速入门Django(在网页写入内容,并将其显示在另一网页)
OK

总结

常用命令:

django-admin.py startproject myweb   #创建项目
python manage.py startapp myapp   #创建 app
python manage.py runserver   #启动 Django 中的开发服务器
python manage.py -h   #帮助文档
python manage.py <command> [options] #Django 命令
---------------------