美文网首页python机器学习爬虫
Django实战入门简易教程

Django实战入门简易教程

作者: 奥特虾 | 来源:发表于2018-08-01 17:27 被阅读96次

    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 !

    相关文章

      网友评论

      本文标题:Django实战入门简易教程

      本文链接:https://www.haomeiwen.com/subject/hmurvftx.html