Django2.2图文教程

2,556 阅读2分钟

原文链接

1.准备工作

开发环境:
python: 3.7.3 下载地址:www.python.org/downloads/
pip: pip3
Django: 2.2 下载地址: www.djangoproject.com/download/
PyCharm: 2017.2 下载地址:www.jetbrains.com/pycharm/dow…

2.基础知识

1.Python: Python发源于八十年代后期。开发者是Centrum Wiskunde & Informatica的Guido van Rossum,这是位于荷兰阿姆斯特丹科学园区的一个数学和计算机科学研究中心。之后Van Rossum一直是Python开发很有影响的人物。事实上,社区成员给了他一个荣誉称号:终生仁慈独裁者(BDFL)。

2.web框架介绍 web框架的概念就像建房子,地基、支撑柱、大梁的骨架还有其他沙石、地板等等材料已经有了, 剩下的就是靠你自己组装起来。犹如积木一样。


说明:图片来源百度。

Django: Python代表性web框架, 遵循MMVC架构模式的开源框架。 它的名字来自Django Reinhardt,一个法国作曲家和吉他演奏家,很多人认为他是历史上最伟大的吉他演奏家。位于堪萨斯洲的Lawrence城的Lawrence Journal-World报社有两位程序员,Adrian Holovaty和Simon Willison,他们在2003的时候开发出了Django,用于给报纸开发web程序。

其他框架:tornado、flask、webpy

3.实例

Python的和Pycharm的安装忽略,安装比较简单。

1.安装

Mac终端下:

$ pip3 install django # 或 pip3 install django==2.2

Windows是在cmd里面,命令相同。

2.创建项目

打开Pycharm,欢迎页create project,然后

然后点击create就可以了。

PS:创建项目也可以使用命令这里不做介绍.

django-admin createproject DjangoQuick
django-admin startapp quick

3.项目结构

4.启动项目

Pycharm菜单栏


直接点击运行。或者左下角Terminal输入python3 manage.py runserver

将会在浏览器看到


这样表示项目已经启动成功,但是我们没有编写任何代码,所以出现了默认的错误提示。

5.添加视图

打开quick目录下的views.py,输入一下内容

from django.shortcuts import render
from django.http import HttpResponse # 新添加
# Create your views here.

# 新添加
def index(request):
    return HttpResponse('success')

6.添加url

打开DjangoQuick下的urls.py,修改如下:

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

from quick.views import index # 导入包

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', index) # 添加新的映射关系
]

如果使用Pycharm的按钮启动项目,需要点击stop,重新运行,如果在terminal中运行项目,会自动重启。
然后刷新浏览器。


然后就会看到我们在views.py的index方法中的输出。

7.返回Html(模版)

在quick目录新建templates目录


然后右键-new-html file, 新建一个index.html文件

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
这是一个html from:https://litets.com
</body>
</html>

修改views.py文件

from django.shortcuts import render


def index(request):
    return render(request, 'index.html')

重启服务器,刷新浏览器将会看到

这是一个html from:https://litets.com

8.静态文件

上面我们已经成功输出了一段html代码,并且成功展示。大家都知html的美化需要依靠css,
css写法有两种:内联式和外联式。内联就不用多说,直接写在html同文件里面就可以了,现在我们使用外联文件改怎么办呢?

在quick目录下新建static/css/style.css文件。

.desc {
    color: red;
}


然后修改index.html

<!DOCTYPE html>
{% load static %}
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

    <link rel="stylesheet" href="{% static 'css/style.css' %}">
</head>
<body>

    <div class="desc">
        这是一个html from:https://litets.com
    </div>

</body>
</html>

刷新浏览器,将会看到字变成红色了。

9.接收用户数据,处理后返回

修改index.html文件

<div class="desc">
    这是一个html from:https://litets.com
</div>
<!--一下是新添加-->
<form action="/" method="post">
    {% csrf_token %}

    用户名: <input type="text" name="username" placeholder="请输入用户名"> <br>
    密码: <input type="password" name="password" placeholder="请输入密码"> <br>
    <input type="submit" value="提交">
</form>

<!--users来自view中的context-->
{% if users %}
    <table border="1px">
        <tr>
            <td>序号</td>
            <td>用户名</td>
            <td>密码</td>
        </tr>

        {% for user in users %}
            <tr>
                <td>{{ forloop.counter }}</td>
                <td>{{ user.username }}</td>
                <td>{{ user.password }}</td>
            </tr>
        {% endfor %}

    </table>
{% endif %}

views.py修改

from django.shortcuts import render


def index(request):
    # 判断是否是post请求
    if request.method == 'POST':
        # 获取到请求参数, username的写法,如果username不存在不会抛异常
        # password 会抛异常
        username = request.POST.get('username')
        password = request.POST['password']

        # 业务 需求:
        users = []
        for x in range(0,3):
            users.append(
                {'username': '%s-%d' % (username, x), 'password': '%s-%d' % (password, x)}
            )

        # 返回给用户  模版中使用到的users就是这里传递进去的
        return render(request, template_name='index.html', context={
            'users': users
        })
    return render(request, 'index.html')

这样我们就实现了一个基本的网站了,但是有一个问题,用户传递过来的数据只是单次有效,无法持久化。
通常一个网站应用到需要持久化数据,比如文件、数据库等。

10.数据库持久化数据

我们打开DjangoQuick目录下的setting.py找到DATEBASES
默认项目使用sqlite3最为数据库。还支持 MySQL, PostgreSQL等


可用的引擎有:

'django.db.backends.sqlite3'
'django.db.backends.postgresql'
'django.db.backends.mysql'
'django.db.backends.oracle'

Mysql的设置:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'test', # 数据库名称,
        'HOST': 'localhost', # 主机地址
        'USER': 'user', # 数据库用户
        'PASSWORD': 'pwd', # 密码
        'PORT': 3306 # mysql的端口默认3306
    }
}

这里我们使用默认的sqlite3。

打开quick下的models.py

from django.db import models

class User(models.Model):
    
    username = models.CharField(max_length=25)
    password = models.CharField(max_length=18)

我们增加了两个字段username和password,Django默认支持orm。
同步数据库,在终端中执行

$ python3 manage.py makemigrations


此命令执行完成后,会在migrations下生产记录models变动的记录。

此时数据库并未变动,然后执行

$ python3 manage.py migrate

这样models的变动,立即同步到数据库中。

修改views.py

from django.shortcuts import render

from .models import User

def index(request):
    # 判断是否是post请求
    if request.method == 'POST':
        # 获取到请求参数, username的写法,如果username不存在不会抛异常
        # password 会抛异常
        username = request.POST.get('username')
        password = request.POST['password']
        
        u = User(username=username, password=password)
        u.save()

    # 业务 需求:查询出所有数据
    users = User.objects.all()
    
    # 返回给用户
    return render(request, template_name='index.html', context={
        'users': users
    })

这样添加用户后就会持久报错了,即使关闭浏览器,重新访问数据也是存在的。

我们查看db.sqlite3文件查看里面的数据

原文链接