社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Django

Django2.2图文教程

lowett1469689904000 • 5 年前 • 348 次点击  
阅读 13

Django2.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文件查看里面的数据

原文链接

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/31811
 
348 次点击