【Django】项目实例

Django框架

【简介】:Python下有许多款不同的 Web 框架,Django是重量级的web框架中最有代表性的框架之一。

下面介绍使用Pycharm图形化界面创建 Django项目 。

一、创建Django项目

点击file => new project创建新项目。选择Django栏目,输入项目名称,这里采用mysite。选择Python解释器版本,点击create创建。如图:

第一步

【第二种方式】项目创建过程也可以这样做:

teminal命令窗格 中通过命令安装Django库:

pip install django django-admin 
python manage.py startproject mysite

以及开始一个新的项目:

python manage.py startproject mysite

生成的目录如下图所示:


第二步
三、各文件和目录的用途:

上图为Django项目的根目录。它包含了一系列自动生成的目录和文件,具备各自专有的用途。

  • 外层的mysite目录与Django无关,只是你项目的容器,可以任意命名;

  • manage.py:一个命令行工具,用于与Django进行不同方式的交互脚本,非常重要,也是 Django的管理主程序;

  • 内层的mysite/ 目录是真正的项目文件包裹目录,他的名字是你引用内部文件的包明,例如: mysite.urls。 - mysite/init.py : 一个定义包的空文件;

  • mysite/settings.py: 项目的主配置文件

  • mysite/urls.py: 路由文件,所有的任务都是从这里开始分配,相当于Django驱动站点的内容 表格;

  • mysite.wsgi.py : 一个基于WSGI的web服务器进入点,提供底层的网络通信功能(通常不用care...);


四、创建APP

在每个Django项目中可以包含多个APP,相当于一个大型项目中的分系统,子模块,功能部件等等,相互之间比较独立,但也有联系。
APP应用和project项目的区别:

  • 一个APP实现某个功能,比如博客,公共档案数据库或者见到的投票系统 ;
  • 一个project是配置文件和多个APP的集合,这里APP组合成整个站点 ;
  • 一个project可以包含多个APP ;
  • 一个APP可以属于多个project;

【所有的APP能够共享项目资源】

在 teminal 中通过命令创建APP:

 python manage.py startapp 文件
【第三步】

五、编写路由

路由都在urls文件里面,它将浏览器输入的url映射到相应的业务处理逻辑。如下所示:

from django.urls import path,include

urlpatterns = [
    path('user/', include("user.urls")),
    path("",include("blog.urls"))
]

六、运行web服务

在 teminal 中通过命令运行web.

 python manage.py runserver

七、使用静态文件

前端三大块 HTML,CSS,JS 还有各种插件在Django项目中存放,我们将这些文件统称为“静态文件”,因为 这些文件的内容基本是固定不变的,不需要动态生成,所以一般将静态文件放在static目录中(约定俗成的吧...)。
为了让Django找到这个目录,依然需要对settings进行配置路径
例如:

// 配置静态文件
STATIC_URL = '/static/'

STATICFILES_DIRS = (
    os.path.join(BASE_DIR,'static'),
)

然后在index.html文件中,引入js文件,项目写到现在,大概的项目文件目录如下图所示:


插入js文件

八、如何返回动态页面

在网页中,当我们收到用户产生的数据之后,通常可以根据数据,进行处理后返回动态页面。

所以,Django采用自己的模板语言,根据提供的数据,替换掉HTML中的相应部分。

【博客-用户注册界面】
在此html代码中,采用Django模板语言进行了替换。

{% extends 'base.html' %}
{% block title %} 微博客-用户注册 {% endblock %}
{% block content %}
    {% load widget_tweaks %}

    <div class="container">
        <div class="row">
            <div class="panel panel-default">
              <div class="panel-heading">
                用户注册
              </div>
              <div class="panel-body">
                  <form id="register_form" action="{% url 'user:register' %}" method="POST">
                      {% csrf_token %}
                      {% for field in form %}
                          <div class="form-group">
                              {{ field.label_tag }}
                              {% render_field field class="form-control" %}
                              {% if field.html_name == 'valid_code' %}
                              <a href="#" id="send_code_to_email">给邮箱发送验证码</a>
                              {% endif %}
                              {{ field.errors }}
                          </div>
                      {% endfor %}
                      <button type="submit" class="btn btn-primary pull-right">提交信息</button>
                  </form>
              </div>
            </div>
        </div>
    </div>
{% endblock %}

九、数据库连接

(1)首先是注册app(打开mysite/settings.py配置文件,这是整个Django项目的设置中心):

INSTALLED_APPS = [
    'user.apps.UserConfig',
    'blog.apps.BlogConfig',
    # django 自带
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # 第三方app
    'widget_tweaks'
]

虽然这一块儿的内容不用深究,但是终究要明白这是什么意思;
【补充】:

django.contrib.admin:admin管理后台站点 
django.contrib.auth:身份认证系统 
django.contrib.contenttypes:内容类型框架 
django.contrib.sessions:会话框架 
django.contrib.messages:消息框架 
django.contrib.staticfiles:静态文件管理框架

(2)在settings中,配置数据库相关的参数

# 数据库连接
DATABASES = {
     'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'vblog',
        'USER': 'root',
        'PASSWORD': '',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    }
}

【注意】:确保你在settings文件中提供的数据库用户具有创建数据库表的权限,因为在接下来,我们需要自动创建许多数据表。

(3)编辑 models.py

【解释】:Django通过自定义Python类的形式来定义具体的模型,每个模型的物理存在方式就是一个 Python的类Class,每个模型代表数据库中的一张表,每个类的实例代表数据表中的一行数据,类 中的每个变量代表数据表中的一列字段。

【重点】:Django通过模型,将Python代码和数据库操作结合起 来,实现对SQL查询语言的封装
如下代码,实现了对User类的封装。

from django.db import models
from django.utils import timezone
import hashlib

# Create your models here.
class User(models.Model):
    gender_choice = (
        (1, "男"), (0, "女")
    )
    user_name = models.CharField(verbose_name="用户名", unique=True, null= False, max_length=100)
    password = models.CharField(verbose_name="密码", null=False,max_length=200)
    gender = models.CharField(choices=gender_choice, max_length=2)
    email = models.EmailField(null=False, unique=True,max_length=100)
    tel = models.CharField(null=True, unique=True, max_length=20)
    create_time = models.DateTimeField(default=timezone.now)

    class Meta:
        db_table = 'tb_user'
        verbose_name = '用户'
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.user_name

    def save(self, force_insert=False, force_update=False, using=None,
             update_fields=None):
        self.password = hashlib.md5(self.password.encode("utf-8")).hexdigest()
        super().save()

Django通过ORM对数据库进行操作,奉行代码优先的理念,将Python程序员和数据库管理员进行分工解耦。

(4)在 teminal 中通过命令创建数据库和数据表

 python manage.py makemigrations
 Python manage.py migrate 

【总结】:修改模型时的操作分三步:

  • 在models.py中修改模型;
  • 运行 python manage.py makemigrations 为改动创建迁移记录;
  • 运行 python manage.py migrate 将操作同步到数据库。

(5)修改views.py中的业务逻辑

看图,如何将数据存入数据库中。


修改业务逻辑

【最后】:重启Web服务后,刷新页面,之后和用户交互的数据都能保存到数据库中,任何时候都可以 从数据库中读取数据,展示到页面上。

python manage.py runserver

【成果展示】


大概就做到酱紫
Django-留言板作品

(留待更新...)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,539评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,911评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,337评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,723评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,795评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,762评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,742评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,508评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,954评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,247评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,404评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,104评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,736评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,352评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,557评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,371评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,292评论 2 352