Django实战入门简易教程

96
奥特虾
2018.08.01 17:27 字数 1940

Hello各位小伙伴,很久没有在简书上更新文章了,好久不见

去年的这个时候由于暑假比较无聊,便在微信上跟着一群小伙伴自学了Python Web开发框架Django,但由于当时代码功力尚浅(现在也浅),学了一段时间后还是有些晕,便一直没有继续学下去

碰巧这段时间开始实习,由于工作需要不得不重新拾起Django。花了两天时间重新学习,并将这个过程记录下来,一方面是方便自己以后随时回顾防止遗忘,另一方面希望能够帮助初学者开始自己的第一个Django项目,OK Let's Go!

1. 安装Django环境

打开cmd命令提示符,输入命令

pip install django==2.0.7
  • 讲解: pip install 语法

    通过==2.0.7 指定Django的版本号,也可以直接使用pip install django默认安装Django官方的最新版本

安装完成后,在cmd界面中输入以下命令验证是否安装成功

c:\users\lenovo>python -m django --version

若终端中显示出版本号,则说明安装成功

2. 创建你的第一个Django项目

1. 新建项目

打开cmd命令提示符,输入以下命令

#进入工作目录
C:\Users\Lenovo>cd C:\Users\Lenovo\PycharmProjects
​
#使用django-admin命令新建项目
C:\Users\Lenovo\PycharmProjects>django-admin startproject 

此时,工作目录下已经创建出了Django的相关文件

目录说明:

  • investigation: 项目的容器。
  • manage.py: 一个实用的命令行工具,可让你以各种方式与该 Django 项目进行交互。
  • investigation/init.py: 一个空文件,告诉 Python 该目录是一个 Python 包。
  • investigation/settings.py: 该 Django 项目的设置/配置。
  • investigation/urls.py: 该 Django 项目的 URL 声明; 一份由 Django 驱动的网站"目录"。
  • investigation/wsgi.py: 一个 WSGI 兼容的 Web 服务器的入口,以便运行你的项目

2. 启动服务

#切换到我们创建的项目
cd investigation
​
#使用manage.py启动服务
C:\Users\Lenovo\PycharmProjects\investigation>python manage.py runserver
​
.......
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK

此时,访问http://127.0.0.1:8000/,即可看到服务启动成功页面

3. 视图(view)与 URL配置

1. 创建view

在之前创建的 investigation 目录下的 investigation 目录新建一个 view.py 文件,并输入代码

from django.http import HttpResponse
​
def hello(request):
    return HttpResponse("Hello world ! ")

该段代码的作用是,当view接收到rerquest请求后,返回一句“Hello world ! ”的提示语

2. 将视图绑定到URL

打开investigation 目录下的 investigation 目录中的url.py 文件,并输入代码(模板中已经存在部分代码,请根据实际情况补充)

from django.contrib import admin
from django.urls import path
from django.conf.urls import url
from investigation import view
​
urlpatterns = [
    path('admin/', admin.site.urls),
    url(r'^/$, view.hello),
]

该段代码的作用是将先前创建好的视图(view)与URL进行绑定,当用户访问URL(http://127.0.0.1:8000)时,返回绑定好的视图函数

代码修改完成后重新启动Django服务,此时,访问http://127.0.0.1:8000即可看到网页端显示Hello World !

3. Django实战练习

这部分以在线表单为例,在Web端的表单中提交数据后,将数据保存到数据库中

1. 创建App

在investigation 目录下的 investigation 目录中打开cmd命令提示符,输入命令新建一个App

django-admin startapp myapp

此时,该目录下生成了一个新的文件夹myapp

  • 讲解:Project和App的区别

一个Web项目可以理解为Project,比如我们创建了一个网站,在网站当中会有各种各样的功能、模块、业务。一个功能就可以是一个App,比如用户管理(User App)、文章管理(Article App)都是在一个Project当中不同的App。Project下面可以有很多Apps,Apps也可以属于不同的Project

2. 导入静态资源

  1. investigation目录的根下创建template目录,并将form.htmlpost.html文件复制到该目录中

  2. investigation目录的根下创建static文件夹

  3. 进入static文件夹中,创建css文件夹,并将style.css文件复制到该文件下

  4. 将下方代码复制粘贴到settings.py的最后

    STATIC_URL = '/static/'
    STATICFILES_DIRS = [
     os.path.join(BASE_DIR,"static")
    ]
  1. 将以下代码填入settings.py57行中括号中
os.path.join(BASE_DIR, 'templates')

讲解: django提供【django.contrib.staticfiles】来帮助你管理静态文件 静态文件包括:images, JavaScript, CSS 等 settings配置:STATIC_URL和STATICFILES_DIRS

3. 设计URL并编写views

  1. 打开App目录下(myapp目录)的views.py,将以下代码粘贴进去,定义一个视图函数
def showform(request):
     return render(request, "form.html")
  • 讲解:
    该段代码定义了一个视图函数,当函数接收到request请求时,返回render函数,在本段代码中,即返回”form.html“页面
  1. 打开urls.py设计URL,将以下代码粘贴到该文件中
    from django.contrib import admin
    from django.urls import path
    from django.conf.urls import url
    from . import view
    from investigation.myapp import views
    ​
    urlpatterns = [
     url(r'^$', view.hello),
     url(r'^showform/$', views.showform)
    ]
  1. 保存编辑完成的代码,重新启动Django服务,若出现以下界面,则说明这一阶段部署成功

4. 提交并保存数据

  1. 在本机安装MySQL客户端,后期我们会将数据保存到MySQL数据库中

  2. 在本机安装Navicat For MySQL

  3. 新建数据库djangoPro

  4. 进入djangoPro中新建数据表userinfo,建表SQL语句如下

    CREATE TABLE `userinfo` (
     `qq_id` varchar(20) DEFAULT NULL,
     `wx_id` varchar(20) DEFAULT NULL,
     `stu_name` varchar(100) DEFAULT NULL,
     `gender` varchar(1) DEFAULT NULL,
     `age` int(3) DEFAULT NULL,
     `major` varchar(30) DEFAULT NULL,
     `hobby` varchar(100) DEFAULT NULL,
     `python_level` varchar(10) DEFAULT NULL,
     `is_new` varchar(100) DEFAULT NULL,
     `has_book` varchar(100) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
  1. 使用pip命令安装pymysql
pip isntall pymysql
  • 讲解:
    pymysql 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用MySQLdb
  1. 打开investigation目录下的init.py文件,写入以下代码
import pymysql
pymysql.install_as_MySQLdb()
  • 讲解:
    由于兼容性问题,Django暂不支持直接使用pymysql,此步骤的代码是将Django默认的数据库连接库MySQLdb更换为pymysql
  1. 打开App目录下(myapp目录)的views.py,编写数据库链接函数connect_database()和数据存储函数savedata()
import pymysql
    ​
def connect_database():
     mysql_conn = {
     'host': 'localhost',
     'port': 3306,
     'user': 'root',
     'password': 'password',
     'db': 'djangoPro',
     'charset': 'utf8'
     }
     db = pymysql.connect(**mysql_conn)
     cursor = db.cursor()
     return db
    ​
def savedata(qq_id, wx_id, stu_name,
     gender, age, major, hobby,
     python_level, is_new, book_info):
    ​
     db = connect_database()
     cursor = db.cursor()
     cursor.execute("INSERT INTO userinfo VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)",
     (qq_id, wx_id, stu_name, gender, age,
     major, hobby, python_level, is_new, book_info))
     db.commit()
     db.close()
  1. views.py里编写保存表单的函数saveform()
def saveform(request):
     qq_id = request.POST['qq_id']
     wx_id = request.POST['wx_id']
     stu_name = request.POST['nick_name']
     gender = request.POST['gender']
     age = request.POST['age']
     major = request.POST['major']
     hobby = request.POST['hobby']
     python_level = request.POST['python_level']
     is_new = request.POST['is_new']
     book_info = request.POST['book_info']
     savedata(qq_id, wx_id, stu_name, gender, age, major, hobby, python_level, is_new, book_info)
    ​
     return render(request, "post.html")
  1. urls.py中添加一条路由记录,绑定saveform的视图
    url(r'^saveform/$', views.saveform)
  1. 保存相关代码,重新启动Django服务

  2. http://127.0.0.1:8000/showform页面填写相关信息后点击提交按钮,页面跳转到成功页

  1. 此时,进入到数据库中,就能看到表单提交的数据了

流程讲解:

保存数据这部分的代码让人有些凌乱,我们来拆分一下程序实现的流程

  1. 当你在showform页面点击提交按钮的一瞬间,一条数据被POST到了我们的服务器

    通过Firefox浏览器抓包,我们可以看到这条数据长这样

  1. 程序将这条数据作为参数(request)传递给views.py中的saveform()函数

  2. Django提供了request.POST的方法获得post请求发出的数据,将表单中的数据逐一提取出来,并赋值给变量

  3. 数据提取出来后,调用savedata()函数,将数据写入数据库

  4. 数据存储成功

结束语

至此,Django实战入门简易教程就结束了,第一次写这么长的文章,写得不好还请多多指教

有些人看完可能要说了,Django提供了models.py,通过ORM存储数据更加简单,为什么还要用pymysql这么原始笨拙的方法

是产品经理逼我这样写的

Emmm.....不对!其实是我们产品经理用心良苦,他觉得对于初学者来说还是用最原始的办法会好一些,ORM虽方便,但是万一中途出现报错,初学者会无从下手(比如我),所以建议对Django框架有了一个大致的了解后,再去自行学习models.py的用法

实验中使用到的相关素材已经放到了百度网盘中
链接:https://pan.baidu.com/s/1BUbmuQNGZWN9tnGA6LdaAQ

Good Luck !

Python学习
Gupao