Django简单入门

文章目录

MTV模式:
Model 模型,与数据库交互
Template 模板,HTML
Views 视图,用于处理请求,返回响应

一、安装Django1.11.8

pip install django==1.11.8

二、创建Django项目

(一)使用cmd创建

进入Django项目目录下(或自定义任何目录)

django-admin startproject 项目名

在这里插入图片描述在这里插入图片描述

(二)使用pycharm创建Django项目

file - New Project选择 Django,并选择存放地址和项目名
在这里插入图片描述

三、运行Django

(一)使用cmd运行

进入DjangoDemo目录下

python manage.py runserver 127.0.0.1:8000 # 地址和端口

在这里插入图片描述进入http://127.0.0.1:8000/,如下显示为正常运行
在这里插入图片描述

(二)使用pycharm运行

右上角存在一个和项目名同名的按钮,点击运行

在这里插入图片描述也可以点击编辑,进行修改

在这里插入图片描述可以修改地址和端口号等
在这里插入图片描述运行结果如图
在这里插入图片描述点击网址,如图为正常运行
在这里插入图片描述

四、Django目录结构

以PycharmDjangoDemo为例,注意使用cmd创建项目没有template文件夹,可自行创建
1.manage.py
功能:包含项目管理的子命令如:启动服务 、创建应用 、数据库迁移 等

2.主文件夹(与项目名称一致的文件夹)
(1)项目初始化文件,服务启动时自动运行(2)WEB服务网关接口的配置文件部署项目时使用(3)项目的基础路由配置文件所有的动态路径必须先使用该文件进行匹配(4)项目的配置文件,启动服务时自动调用
查看settings.py文件

  • BASE_DIR 表示当前项目的绝对路径

  • DEBUG 是否启用调试模式,开发True,生产False

  • ALLOWED_HOSTS 设置允许访问到本项目的地址列表
    取值:
    ** 空 表示只有localhost和127.0.0.1能访问
    ** [’*’] 表示任何本机的地址都能访问到当前项目,如localhost / 127.0.01 / 0.0.0.0 等,局域网也允许访问
    注意:如果要在局域网内访问,启动方式为:

    python manage.py runserver 0.0.0.0:8000 # 端口号可以自己设置
    
  • INSTALLED_APPS 指定已安装的应用

  • MIDDLEWARE 注册中间件

  • TEMPLATES 指定模板的配置信息

  • DATABASES 指定数据库的配置信息

  • LANGUAGE_CODE 指定语言配置
    取值:中文:zh-hans

  • TIME_ZONE 时区
    取值:中国时区:Asia/Shanghai

五、URL的使用

(一)urls.py

默认粗壮乃与主文件夹,主路由配置文件
包含最基本的路由 - 视图 的映射关系

(二)url()语法

from django.conf.urls import url

语法:
url(regex, view, kwargs=None, name=None)

  • regex:字符串类型,匹配的请求路径,允许是正则表达式
  • view:指定路径所对应的视图处理函数的名称
  • kwargs:向视图中传递的参数
  • name:为地址起别名,反向解析时使用

(三)简单url响应示例

localhost:8000中显示:Hello World
1.在主文件夹下创建 views.py 文件
在这里插入图片描述2.在views.py

from django.http import HttpResponse

def index(request):
    return HttpResponse('Hello World')

在这里插入图片描述3.在urls.py

from django.conf.urls import url
from django.contrib import admin

from PycharmDjangoDemo import views

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^$', views.index)  # ^$表示地址127.0.0.1:8000/ 后没有任何东西
]

在这里插入图片描述4.运行
在这里插入图片描述5.进入网页
在这里插入图片描述

(四)带参数url

使用正则表达式的子组进行传参:()
一个子组表示一个参数,多个参数需要使用多个子组,并使用 / 隔开

(五)带参数url示例

1.在主文件夹的views.py

from django.http import HttpResponse

def index(request):
    return HttpResponse('Hello World')

def show(request, arg1, arg2):
    # arg1, arg2为字符串,使用 ‘+’ 进行连接
    return HttpResponse('参数1:' + arg1 + '参数2:' + arg2)

在这里插入图片描述2.urls.py

from django.conf.urls import url
from django.contrib import admin

from PycharmDjangoDemo import views

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^$', views.index),
    url(r'^show/(\d\d)/(\d)', views.show)  # \d\d:两个数字,/:分隔 \d:一个数字
]

在这里插入图片描述
3.运行
4.进入 127.0.0.1:8000/show/99/5
99 两个数字,可任意
5 一个数字,可任意
在这里插入图片描述在这里插入图片描述

(六)url()的name参数

请看完《七、Django中的模板:Templates》再继续往下看

name参数作用:通过别名实现地址的反向解析,通常和模板搭配使用(模板的详细内容见七)
在模板中格式:

{% url '别名' %}
{% url '别名' '参数值1' '参数值2' %}

1.示例:不带参

1.在templates中修改index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>index首页</title>
</head>
<body>
    <h2>这是index首页</h2>
    <a href={% url 'long_url' %}>long_url首页链接</a>
</body>
</html>

在这里插入图片描述
2.修改idnexviews.py

def index(request):
    return render(request, 'index.html')
    
def long_url(request):
    return HttpResponse('long_url首页')

在这里插入图片描述3.修改idnexurls.py
在这里插入图片描述
4…运行127.0.0.1:8000
在这里插入图片描述5.点击链接
在这里插入图片描述

2.示例:带参

1.在templates中修改index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>index首页</title>
</head>
<body>
    <h2>这是index首页</h2>
    <a href={% url 'long_url' '1' '2' '3' %}>long_url首页链接</a>
</body>
</html>

在这里插入图片描述2.修改idnexurls.py

from django.conf.urls import url

from index import views

urlpatterns = [
    url(r'^$', views.index),
    url(r'^show_image/$', views.show_image),
    url(r'^parent/$', views.show_parent),
    url(r'^children/$', views.show_children),
    url(r'^longlonglonglonglongurl/(\d)/(\d)/(\d)',views.long_url, name='long_url'),
]

在这里插入图片描述3.修改idnexviews.py

def long_url(request, arg1, arg2, arg3):
    return HttpResponse('long_url首页' + '参数1:' + arg1 + '=参数2:'+ arg2 + '=参数3:'+ arg3)

在这里插入图片描述4.运行127.0.0.1:8000,可见参数已被传入
在这里插入图片描述

六、应用-app

app是一个独立的业务模块

(一)创建 & 配置应用

1.使用cmd创建应用

python manage.py startapp 应用名

在这里插入图片描述在项目下将会自动创建app文件夹
在这里插入图片描述

2.使用pycharm创建应用

1.Tools
在这里插入图片描述2.创建应用
在这里插入图片描述3.查看是否创建app文件
在这里插入图片描述

3.配置

settings.py中进行注册
INSTALLED_APPS = [
… …
‘创建的应用名’
]
在这里插入图片描述

(二)分布式路由系统

一般主文件夹(与项目同名的文件夹)中的urls用于分发url,而不用于直接处理请求
一般在应用中的urls.py中处理url,在应用的views.py中进行处理
应用中默认没有urls.py文件,需要自己手动创建

示例

目标:
输入127.0.0.1:8000/ 页面显示 首页
输入127.0.0.1:8000/app/ 页面显示 app首页
输入127.0.0.1:8000/book/ 页面显示 book首页
1.创建两个新应用 book index(主界面)
startapp book
startapp index
在这里插入图片描述在这里插入图片描述在这里插入图片描述2.在主文件夹下的setting.py中配置应用,并删除主文件夹下的views.py
在这里插入图片描述
3.在app、index、book文件夹下创建urls.py文件

4.进入主文件夹下的urls.py,设置分发

from django.conf.urls import url, include
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^', include('index.urls')),
    url(r'^app', include('app.urls')),
    url(r'book', include('book.urls'))
]

在这里插入图片描述5.进入index文件夹下的views.py

from django.shortcuts import render
from django.http import HttpResponse

# Create your views here.
def index(request):
    return HttpResponse('首页')

6.进入index文件夹下的urls.py

from django.conf.urls import url

from index import views

urlpatterns = [
    url(r'^$', views.index),
]

7.进入book文件夹下的views.py

from django.shortcuts import render
from django.http import HttpResponse

# Create your views here.
def index(request):
    return HttpResponse('book首页')

8.进入index文件夹下的urls.py

from django.conf.urls import url

from book import views

urlpatterns = [
    url(r'^$', views.index),
]

9.进入app文件夹下的views.py

from django.shortcuts import render
from django.http import HttpResponse

# Create your views here.
def index(request):
    return HttpResponse('app首页')

10.进入index文件夹下的urls.py

from django.conf.urls import url

from app import views

urlpatterns = [
    url(r'^$', views.index),
]

11.运行
http://127.0.0.1:8000/
在这里插入图片描述http://127.0.0.1:8000/app
在这里插入图片描述http://127.0.0.1:8000/book
在这里插入图片描述

七、Django中的模板:Templates

(一)Django中的模板

Django中的模板是由Django自己提供的,而非Jinja2
所以Django中的模板语法与Flask中的模板语法会稍有不同

(二)模板的配置

在主文件夹的setting.py文件中有TEMPLATES变量

  1. BACKEND : 指定模板的引擎
  2. DIRS : 指定保存模板的目录
  3. APP_DIRS : 是否要在应用中搜索模板本
  4. OPTIONS : 有关模板的选项们

(三)模板加载的的方式

1.通过 loader 获取模板,通过HttpResponse进行响应

示例
创建一个index.html,进入网站127.0.0.1:8000时显示该html
1.在templates创建index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>index首页</title>
</head>
<body>
    <h2>这是index首页</h2>
</body>
</html>

在这里插入图片描述2.进入index文件夹下的views.py

from django.shortcuts import render
from django.http import HttpResponse
from django.template import loader

# Create your views here.
def index(request):
    # 1.通过loader加载模板
    t = loader.get_template("index.html")
    # 2.将t转换成字符串
    html = t.render()
    # 3.响应
    return HttpResponse(html)

在这里插入图片描述3.运行
在这里插入图片描述

2.使用 render() 直接加载并响应模板(推荐)

1.同上
2.进入index文件夹下的views.py

from django.shortcuts import render

# Create your views here.
def index(request):
    return render(request, 'index.html')

3.运行显示同上

(四)模板的语法

1.变量

传入字典时,使用字典.键获取值

(1)在模板中使用变量

{{ 变量名 }}
1.修改index.html文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>index首页</title>
</head>
<body>
    <h2>这是index首页</h2>
    <h5>dic: {{ dic }}</h5>
</body>
</html>
(2)在后端中传递变量

进入index文件夹下的views.py

from django.shortcuts import render

# Create your views here.
def index(request):
    dic = {'one':1,'two':2}
    return render(request, 'index.html', locals()) # 传递当前所有变量

3.运行
在这里插入图片描述

2.标签

作用:将一些服务器端的功能嵌入到模板中
标签语法:

{% 标签 %}
{% 结束标签 %}
(1)if 标签

语法:

{% if 条件 %}
{% endif %}

1.修改index.html文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>index首页</title>
</head>
<body>
    <h2>这是index首页</h2>
    {% if dic.one == '1' %}
    <h2>dic['one'] =  '{{ dic.one }}'</h2>
    {% endif %}
</body>
</html>

2.运行
在这里插入图片描述

(2)for 标签

语法:

{% for 变量 in 可迭代对象 %}
{% endfor %}

1.修改index.html文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>index首页</title>
</head>
<body>
    <h2>这是index首页</h2>
    {% for i in dic %}
        <h2>{{ i }}</h2>
    {% endfor %}
</body>
</html>

2.运行
在这里插入图片描述

3.内置变量:forloop

1.forloop.counter : 得到当前循环遍历的次数,从1开始
2.forloop.counter0 : 得到当前循环遍历的下标,从0开始
3.forloop.first 返回真假
4.forloop.last 返回真假

修改index.html文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>index首页</title>
</head>
<body>
    <h2>这是index首页</h2>
    {% for i in dic %}
        <h2>{{ i }}</h2>
        forloop.counter: {{ forloop.counter }}
        forloop.counter0: {{ forloop.counter0 }}
        forloop.first: {{ forloop.first }}
        forloop.last: {{ forloop.last }}
    {% endfor %}
</body>
</html>

运行
在这里插入图片描述

(五)模板的静态文件

什么是静态文件:不能与服务器端做动态交互的文件都是静态文件,如:图片,css,js,音频,视频,html文件(部分)

1.静态文件的配置

  1. 默认情况下,项目中不存在 static 文件夹,需要自己创建
    在这里插入图片描述
  2. 在主文件夹下的 settings.py 中配置一下两项内容:
    注意:如果不加上此配置语句,很可能会出现无法访问静态文件的情况,在项目中最好加上
    # 配置静态文件的访问路径
    STATIC_URL = '/static/'
    # 配置静态文件的存储路径
    STATICFILES_DIRS=(os.path.join(BASE_DIR,'static'),)
    

在这里插入图片描述

2.静态文件的访问

(1)使用静态文件的访问路径进行访问

示例:

  1. 保存一张图片,将其放到static文件夹中
    在这里插入图片描述2. 在templates中新建show_image.html文件
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>show_image</title>
</head>
<body>
<img src="/static/1.png">
</body>
</html>

在这里插入图片描述3. 修改index文件夹下的views.py文件

def show_image(request):
    return render(request, 'show_image.html')

在这里插入图片描述4. 修改index文件夹下的urls.py文件

from django.conf.urls import url

from index import views

urlpatterns = [
    url(r'^$', views.index),
    url(r'^show_image/$', views.show_image)  
]

在这里插入图片描述
5.运行127.0.0.1:8000/show_image
在这里插入图片描述成功显示图片

(二)通过 {% static %}标签访问静态文件

{% static %}表示的就是静态文件访问路径
1.加载 static
{% load static %}
2.使用静态资源时
语法:{% static ‘静态资源路径’ %}
示例:
修改show_image.html文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>show_image</title>
</head>
<body>
    {% load static %}
    <img src={% static '1.png' %}>
</body>
</html>

在这里插入图片描述运行127.0.0.1:8000/show_image,显示图片

(六)模板的继承

1.在父模板中

要标识出哪些在子模板中是允许被修改的
格式:

{% block 块名 %}
...
{% endblock %}

block 作用:

  1. 在父模板中正常显示
  2. 在子模板中
    不重写,将按照父模板的效果显示
    重写,则按照重写效果显示

2.在子模板中

  1. 指定要继承自哪个父模板
    格式:
    {% extends '父模板名称' %}
    
  2. 重写父模板中的内容
    格式:
    {% block 块名 %}
    ...
    {% endblock %}
    

3.继承的注意事项

模板继承时,服务器端的动态内容无法继承

4.模板继承示例

1.在templates中创建parent.htmlchildren.html

parent.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>parent</title>
</head>
<body>
<h5>parent首页</h5>
{% block show_name %}
<h5>我叫parent</h5>
{% endblock %}
</body>
</html>

在这里插入图片描述

children.html
{% extends 'parent.html' %}
{% block show_name %}
<h5>我叫children</h5>
{% endblock %}

在这里插入图片描述2.修改index文件夹下的views.py文件

def show_parent(request):
    return render(request, 'parent.html')

def show_children(request):
    return render(request, 'children.html')

在这里插入图片描述3.修改index文件夹下的urls.py文件

from django.conf.urls import url

from index import views

urlpatterns = [
    url(r'^$', views.index),
    url(r'^show_image/$', views.show_image),
    url(r'^parent/$', views.show_parent),
    url(r'^children/$', views.show_children),
]

在这里插入图片描述4.分别运行127.0.0.1:8000/parent/ 和 127.0.0.1:8000/children/
parent.html
在这里插入图片描述children.html
在这里插入图片描述可见,children.html继承了parent.html,并修改了block中的内容

八、Django中的模型 - Models

(一)ORM模型

ORM : Object Relationship Mapping
对象 关系 映射
三大特征:

  1. 表 到 类的映射
  2. 数据类型的映射
  3. 关系映射

Django中的Models与数据库的表是映射关系,
1.Models中的每一类相当于数据库中的每一张表
2. 类名 -> 表名
3.类属性 -> 字段
4 .每个类的实例 -> 表的每一行数据

数据库与Djando数据的导入导出过程
在这里插入图片描述

(二)Django与数据库

1.数据库的配置信息

主文件夹下的settings.py文件中进行配置

```
DATABASES = {
		'default':{
			'ENGINE':'数据库引擎',
			'NAME':'数据库名',
			'USER':'用户名',
			'PASSWORD':'密码',
			'HOST':'主机',
			'PORT':'端口',
		}
	}
```

1.ENGINE:指定数据库的引擎,mysql引擎为:‘django.db.backends.mysql’
2.NAME:指定要连接的数据库的名称
3.USER:指定登录到数据库的用户名
4.PASSWORD:指定登录到数据库的密码
5.HOST:指定要连接的主机
6.PORT:指定要连接的主机上的端口号

2.数据库迁移

(1)将Models类生成中间文件

在cmd中

python manage.py makemigrations 应用名

作用:将每个应用下的models.py文件生成一个中间文件,并保存在migrations文件夹中

(2)将中间文件映射回数据库

在cmd中

python manage.py migrate

作用:将每个应用下的migrations目录中的中间文件同步回数据库

3.将数据库导出到models

在cmd中

python manage.py inspectdb 表名

4.Django配置数据库示例(以MySql为例)

  1. 在数据库中创建新的数据库test
  2. 在主文件夹下的settings.py文件中进行配置即完成
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'test',
            'USER': 'root',
            'PASSWORD': '123456',
            'HOST': 'localhost',
            "POST": '3306'
        }
    }
    

在这里插入图片描述

(三)Models

在应用文件夹中,存在models.py文件,用于编写模块
以项目中的index应用为例
在这里插入图片描述

1.Models的语法规范

语法:

class CLASSNAME(models.Model):
	NAME=models.FIELD_TYPE(FIELD_OPTIONS)
  1. CLASSNAME:实体类名,表名组成一部分
    默认表名组成规范:应用名称_classname
  2. NAME:属性名,映射回数据库就是字段名
  3. FIELD_TYPE:字段类型:映射到表中的字段的类型
字符类型数据库类型描述
BooleanField()tinyint编程语言中:使用True或False来表示值,在数据库中:使用1或0来表示具体的值
CharField()varchar必须要指定max_length参数值
DateField()date表示日期,在编程语言中,使用字符串来表示具体值
DateTimeField()datetime表示日期和时间
DecimalField()datetime使用小数表示该列的值
FloatField()float使用小数表示值
EmailField()varchar编程语言和数据库中使用字符串
IntegerField()int编程语言和数据库中使用整数
URLField()varchar编程语言和数据库中使用字符串
ImageField()varchar在数据库中为了保存图片的路径,编程语言和数据库中使用字符串
TextField()text表示大量数据,编程语言和数据库中使用字符串
  1. FIELD_OPTIONS:字段选项,指定创建的列的额外的信息
字段选项描述
primary_key如果设置为True,表示该列为主键
null如果设置为True,表示该列值允许为空默认为False
default设置所在列的默认值
db_index如果设置为True,表示为该列增加索引
unique如果设置为True,表示该列的值唯一
db_column指定列的名称,如果不指定的话则采用属性名作为列名

2.Models创建示例

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值