本篇介绍django的安装与简单使用。
通过这篇文章,你能了解到:
- django的安装与常用命令
- 使用django做一个登录小栗子
django的安装与简单使用
下载安装
命令行
pip install Django==1.11.23 -i https://pypi.tuna.tsinghua.edu.cn/simple/
如果同时安装了python2和python3的情况,可以参考如下方法,使用指定版本的python的pip安装
python2 -m pip install xxx
或者
python3 -m pip install xxx
pycharm
在setting
,Project Interpreter
中,右侧点加号
,搜索django
,勾选Specify version
选择1.11.23
后点击install
。
换源加快速度:在下面Manage Repositories
中添加源。
下面有源可以添加上面的源
创建项目
命令行
一个python环境下:django-admin startproject 项目名
多个python环境:python36 -m django startproject 项目名
1 | 我自己的路径 |
目录结构
创建好项目后,它的目录结构如下
1 | mysite/ |
这些目录和文件的用处是:
- 最外层的:file: mysite/ 根目录只是你项目名。
manage.py
: 一个让你用各种方式管理 Django 项目的命令行工具。- 里面一层的
mysite/
目录包含你的项目,它是一个纯 Python 包。它的名字就是当你引用它内部任何东西时需要用到的 Python 包名。 (比如mysite.urls
). mysite/__init__.py
:一个空文件,告诉 Python 这个目录应该被认为是一个 Python 包。mysite/settings.py
:Django 项目的配置文件。mysite/urls.py
:Django 项目的 URL 声明,就像你网站的“目录”。mysite/wsgi.py
:作为你的项目的运行在 WSGI 兼容的Web服务器上的入口。
pycharm
专业版才有这些功能。
file
-> new project
-> django
-> 项目路径 解释器选已有的(如果是新的虚拟环境会下载最新的django)
创建好项目后,它的目录结构如下
1 | mysite/ |
启动项目
命令行
1 | python36 manage.py runserver # 127.0.0.1:8000 |
1 | 加上端口号 |
1 | 改ip地址 |
1 | 让人去访问 |
pycharm
note: 打开别人的项目.idea
要干掉,这里包含了别人的配置,会影响。
选择项目(dj图标) 点击 绿三角
启动, 不要右键运行文件
绿三角下面 edit configure
中 改ip和端口
简单的使用
settings 中 pycharm 在 模板 TEMPLATES 的 DIR 帮我们写一个路径,在tmplates中写html就可以。
- urls.py 中写对应关系(路由), 写函数
1 | # urls.py |
templates/home.html
1 |
|
templates/load.html
使用了bootstrap中的表单
1 |
|
完整的登录实例
第一步:完善前面的代码
完善HTML
对于上面的代码,涉及form表单,input标签,我们点击提交按钮,这个结果该怎么获得呢?
- form的属性中 action 表示提交的地址,空表示向当前地址提交(和当前地址组成url);属性
method
确定请求的方式,对于表单提交我们采用post
方式 - 怎样获得input标签中输入的邮箱和密码呢? 属性
name
与值value 形成一个键值对,存在POST(QueryDict)中。 - 对于提交按钮,如果是在form表单中,一个button(设不设置type都可以)就可以提交,或者是 将
input
标签的type
属性设置为submit
。
修改结果如下:
- form中,设置 action method
- input中设置 name
1 | <form class="form-signin" action="" method="post" novalidate> |
note:form
表单中的novalidate
是关闭对输入的验证(关闭前端验证)。
本地css,js,img等静态文件的配置
前面我们使用了一个网络链接,来导入bootstrap,那如果是本地的数据,该怎么存放,放在哪呢???从配置静态文件入手。
静态文件是指 网站中的 js, css, 图片,视频等文件以及 jQuery插件,对于这些静态文件我们需要将他们放在一个统一的文件夹下面。
例如:
1 | 项目名 |
首先配置 settings.py
, 找到 STATIC_URL = '/static/'
并在下面补充一个STATICFILES_DIRS = []
。
/static/
是一个别名,
1 | STATIC_URL = '/static/' # 别名 |
完善函数
① 在开始的时候,我们只是使用render函数,做一个返回。
1 | def login(request): |
② 接下来就该拿前端的数据,并进行用户名,密码的校验。
首先我们需要做一步分析,在同一个地址login
下我们需要做两种操作,一个是打开这个页面,一个是提交用户名和密码,从后端我们该如何区分这两个呢?在地址栏输入 http://127.0.0.1:8000/login
,我们打开了登录页面,这是一个get请求,那么当我们点击提交的时候这是一个post请求,所以可以通过一个条件判断来完成两种操作。如何区分请求呢?可以通过输出request.method
这个属性(字符串类型)来进行判断。对于get请求,依旧维持原样,打开这个登录页面。
然后,对于post请求,我们需要验证用户名和密码,我们该怎样拿到这两条数据呢? request.POST
这个属性是一个QueryDict,里面包含了提交的信息,对于QueryDict使用 get方法 request.POST.get()
来得到用户名和密码。(QueryDict继承字典,它本身还有getlist方法)
1 | <QueryDict: {'username': ['xiaobai'], 'password': ['123']}> |
由于目前还没有没有提及数据库,我们先把这块写死,后面连接数据库后,从数据库中查询,来验证用户信息。
当用户名和密码校验成功后我们该怎么办呢? 重定向! 为什么要重定向呢?如果我们不重定向,使用render函数,虽然页面内容会发生改变,但是url是不会变的,重定向就像你在地址栏中重新输入一个url打开一个网页,这样页面内容和url都发生改变,符合对应关系。使用redirect(to, *args, **kwargs):
函数就可以完成重定向。
note:重定向中字符串前面必须加 /
,不加这个就会和当前的路径进行拼接,理解上也是,我们重新从 /
根 开始。
1 | def login(request): |
补充:可能会遇到关于csrf
的问题,打开settings配置,将 MIDDLEWARE
关于 csrf
那条信息注释掉就可以。
1 | MIDDLEWARE = [ |
第二部:创建APP
反思前面所做的,我们把函数写在了 urls.py
内,这个py文件只是用来做对应关系的(哪个url对应哪个函数)。可我们把函数也写在了这里,这样就有些不合适了,所以接下来,我们要把函数放在属于它的地方。
APP把我们写的很多很多功能进行分类,规范写法。
新建APP,命令行
1 | python36 manage.py startapp app01 |
note:因为我的多python
共存,我将这个python
改名为python36
.
注册APP
我们还需要在settings配置中注册APP。如果在创建项目的时候创建APP是不需要在进行注册的,在配置中找到下面,并在底部添加 'app01.apps.App01Config'
。
1 | INSTALLED_APPS = [ |
转移函数
APP创建好后,它的目录如下:
1 | app01 |
明白了目录结构,那我们接下来的事情就是要将函数放入 views.py
中。那么在 urls.py
只需要做 from app01 import views
导入就行,使用时只是 views.login
。 在后面我会给出完整的 views.py
内容。
完成了函数部分,那接下来就该对数据库下手了!😄
第三步:使用数据库
前面的验证是写死的,真实的数据是存在数据库中的,那我们就首先来配置数据库,然后在使用数据库。
修改数据库操作模块
数据库操作模块是python与MySQL沟通的桥梁。这个版本的django配置的数据库操作模块只支持python2,所以需要进行更换,我选择的是pymysql
,
在app01这个包下面的 __init__.py
中写,pymysql
模块是需要下载的,如果没有在pycharm的项目解释器(Project Iterpreter)中下载安装。
1 | # 在settings.py同级下的 __init__ 写入如下内容,更换数据库操作模块 |
创建一个库并添加用户名和密码
cmd中登录 mysql 创建一个数据库
1 | create database userinfo; |
创建好数据库后先暂停,我们需要在python来创建表。
添加MySQL数据库
settings中修改 DATABASES
连接数据库,需要如下参数:
1 | DATABASES = { |
使用ORM代替SQL语句
由于orm(object relation mapping)我们不再需要手写大部分的SQL语句,利用orm来进行操作。一个类就是一张表,一个对象就是一条记录,一个属性就是记录中的一个字段,这样就解决面向对象与关系数据库存在的互不匹配的现象。
① 在 app01
下的 model.py
中定义类,
CharField为字段名 这里为varchar(32)
1 | class User(models.Model): |
② pycharm下的terminal 输入
python manage.py makemigrations
制作迁移文件,它会将变更的内容生成一个新的文件。python manage.py migrate
执行迁移, 将会和数据库进行同步,增删改
note:如果在输入第一个命令是会出现以下提示:
1 | django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No module named 'MySQLdb'. |
说明没有切换数据库操作模块,在前面有提及。
执行上面的两条命令。数据库就多出好多张表,找到我们创建的User,使用Navicat打开这个数据库添加数据,或者使用cmd添加数据,或者是pycharm右侧的database来添加数据。
我开始使用的是pycharm来做的,由于pycharm版本是2019,在连接数据库的时候出现一个错误
1 | Connection to @localhost failed. |
解决办法:
emmm….我先是使用的Navicat,后来换成了pycharm2018 ,最后看到了解决办法是在pycharm2019连接MySQL的时候需要选择版本。
这样用户名密码有了后,我们回到开始的地方。
③ 使用orm方法,来查询数据库,有两种方法,一个是get方法,但这种方法在这里不合适。所以使用filter方法。
models.User.objects.get(username=user, password=pwd)
models.User.objects.filter(username=user, password=pwd)
1 | def login(request): |
到此,我们完成了一个登录的实例。
完整代码:
app01文件夹下
__init__.py
1 | # __init__.py |
views.py
1 | # views.py |
根目录下的该项目名下
settings.py
1 | """ |
urls.py
1 | """day54作业 URL Configuration |
登录页面来自bootstrap,大家直接扒就可以。
小结
django常用命令:
下载
pip install django==1.11.23 -i 镜像
创建项目
django-admin startproject 项目名
启动项目
cd 到项目的根目录
python manage.py runserver
python manage.py runserver 80
python manage.py runserver 0.0.0.0:80
创建app
python manage.py startapp app名
注册app
数据库迁移
python manage.py makemigrations 将测已经注册app下的models
python manage.py migrate 迁移,将models的变更记录同步到数据库