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. 导入静态资源
-
在investigation目录的根下创建template目录,并将form.html和post.html文件复制到该目录中
-
在investigation目录的根下创建static文件夹
-
进入static文件夹中,创建css文件夹,并将style.css文件复制到该文件下
-
将下方代码复制粘贴到settings.py的最后
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR,"static")
]
- 将以下代码填入settings.py第57行中括号中
os.path.join(BASE_DIR, 'templates')
讲解: django提供【django.contrib.staticfiles】来帮助你管理静态文件 静态文件包括:images, JavaScript, CSS 等 settings配置:STATIC_URL和STATICFILES_DIRS
3. 设计URL并编写views
- 打开App目录下(myapp目录)的views.py,将以下代码粘贴进去,定义一个视图函数
def showform(request):
return render(request, "form.html")
- 讲解:
该段代码定义了一个视图函数,当函数接收到request请求时,返回render函数,在本段代码中,即返回”form.html“页面
- 打开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)
]
- 保存编辑完成的代码,重新启动Django服务,若出现以下界面,则说明这一阶段部署成功
4. 提交并保存数据
-
在本机安装MySQL客户端,后期我们会将数据保存到MySQL数据库中
-
在本机安装Navicat For MySQL
-
新建数据库djangoPro
-
进入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
- 使用pip命令安装pymysql
pip isntall pymysql
- 讲解:
pymysql 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用MySQLdb
- 打开investigation目录下的init.py文件,写入以下代码
import pymysql
pymysql.install_as_MySQLdb()
- 讲解:
由于兼容性问题,Django暂不支持直接使用pymysql,此步骤的代码是将Django默认的数据库连接库MySQLdb更换为pymysql
- 打开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()
- 在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")
- 在urls.py中添加一条路由记录,绑定saveform的视图
url(r'^saveform/$', views.saveform)
-
保存相关代码,重新启动Django服务
-
在http://127.0.0.1:8000/showform页面填写相关信息后点击提交按钮,页面跳转到成功页
- 此时,进入到数据库中,就能看到表单提交的数据了
流程讲解:
保存数据这部分的代码让人有些凌乱,我们来拆分一下程序实现的流程
-
当你在showform页面点击提交按钮的一瞬间,一条数据被POST到了我们的服务器
通过Firefox浏览器抓包,我们可以看到这条数据长这样
-
程序将这条数据作为参数(request)传递给views.py中的saveform()函数
-
Django提供了request.POST的方法获得post请求发出的数据,将表单中的数据逐一提取出来,并赋值给变量
-
数据提取出来后,调用savedata()函数,将数据写入数据库
-
数据存储成功
结束语
至此,Django实战入门简易教程就结束了,第一次写这么长的文章,写得不好还请多多指教
有些人看完可能要说了,Django提供了models.py,通过ORM存储数据更加简单,为什么还要用pymysql这么原始笨拙的方法
是产品经理逼我这样写的
Emmm.....不对!其实是我们产品经理用心良苦,他觉得对于初学者来说还是用最原始的办法会好一些,ORM虽方便,但是万一中途出现报错,初学者会无从下手(比如我),所以建议对Django框架有了一个大致的了解后,再去自行学习models.py的用法
实验中使用到的相关素材已经放到了百度网盘中
链接:https://pan.baidu.com/s/1BUbmuQNGZWN9tnGA6LdaAQ
Good Luck !
网友评论