学习python初识django(一)

如果使用pip安装过慢可以尝试切换pip的镜像源

安装django
具体安装那个版本的django
要看你当前python的版本

pip install django

安装完成后会

初始化

django-admin.py startproject [项目名]

执行后会在当前目录下生成一个 [项目名同名的主包]和manage.py(程序的主入口)

启动服务

切换到有manage.py的路径下

cd [项目名]

然后
启动本地服务
0.0.0.0:8000就是本地服务 访问输入127.0.0.1:8000
这么写是为了让同局域网下的其他人可以通过ip来访问你的服务

python manage.py runserver 0.0.0.0:8000

设置路由

在初始化结束后主包中有一个urls.py
在这个urls.py文件中去配置路由地址,配置好之后就可以通过url去访问配置好的地址了

1、在主包下创建一个views.py文件

views.py

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

urls.py

from django.conf.urls import url
 
from . import views
 
urlpatterns = [
    url(r'^$', views.hello),
]

使用模板

使用模板常常用引用的模块

from django.shortcuts import render # 用来将数据渲染到html文件中并且返回回来
from django import template # 用来设置自定义过滤器和自定义标签
register = template.Library()    #register的名字是固定的,不可改变
from django.utils.safestring import mark_safe # 可以将字符串通过该方法转为html元素

用法一会再说


def runoob(request):
    name ="菜鸟教程"
    return render(request, "runoob.html", {"name": name})

@register.filter # 装饰器的参数最多只能有 2 个。
def my_filter(v1, v2):
    return v1 * v2

python中有自己的一套模板语法{{ }} {% %}
首先在manage.py同级目录下创建一个templates文件夹
然后在里面创建html文件
然后
使用模板首先要在主包中的setting.py配置加载的模板地址
下面的DIRS数组内容就是要新增的

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR,'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

配置好了就可以使用模板了
templates/index.html

<body>
	<div>{{name}}</div>
</body>

主包\views.py

from django.shortcuts import render

def template(request):
	name = '菜鸟教程'
	return render(request,'index.html',{'name':name})
	

然后在urls

from django.conf.url import url
from . import views
urlpatterns = [
	url(r'templateText',views.template)
]

然后就可以通过 url 127.0.0.1:8000/templateText去访问这个内容

模板用法

过滤器
{{ 变量名 | 过滤器:可选参数 }}
{{name|lower}} # 将英文字母转化为小写
{{name|upper}} # 将英文字母转化为大写
也可以嵌套使用 | 又称管道符 可以将上一个的输出当作下一个输入
# 'name':'aaaaa'
{{name|first|upper}} # A first获取第一个字符然后后转化为大写
# 'article':"xxxxxx xxxxxxxx xxxxxxxxxx xxxxxxxx"
{{article|truncatewords:"2"}} # xxxxxx xxxxxxxx...
# 这是获取当前文章的前两个单纯 超出部分变成...
{{article|truncatechars:"2"}} # x...
# 'text':'\cc\'"\cccaaaaa'
{{text|addslashes}} # 在反斜杠、单引号、双引号前添加反斜杠  
# \\cc\'\"\\cccaaaaa
# import datetime
# now = datetime.datetime.now()
# render(request,'index.html',{'time':now})
{{ time|date:"Y-m-d"}} # 实例 2020-8-23
# Y-m-d H:i:s 返回年-月-日 小时:分钟:秒
# url = '<a href = "www.baidu.com" >百度</a>'
{{ url }} # <a href = "www.baidu.com" >百度</a>
{{ url|safe }} # 百度(可以跳转的超链接)
# safe代码当前的字符串绝对安全不需要转义 然后浏览器就会把他解析成html元素
{{ acc|default:"我的默认值"}} # 当前面的值返回为false时就会显示默认值
# name = '111'
{{name|length}} # 打印当前字符串的长度
# num = 1024
{{num|filesizeformat}} # 1.0KB 将文件大小转化为更加可读的显示方式
标签

{%  语法关键字 %}
{%  end+语法关键字 %}
{% if name == 123 %}
<div>name == 123</div>
{% endif %}
{% if name == 123 %}
<div>name == 123</div>
{% elif name == 456%}
<div>name == 456</div>
{% else %}
<div>{{name}}</div>
{% endif %}
if可以使用and or这样的关键字代表 && ||
# 'name':123
{% ifequel name 123 %}
pass... {# 会执行这里的内容#}
{% else %}
这里也支持else分支
{% endifequal %}
{% ifnotequal name '123' %}
pass...
{% endifnotequal %} 
# 假如 我在使用这个模板时
# render(request,'index.html',{'arr':[1,2,3,4,5,6]})
{% for x in arr %}
	<div>{{x}}</div>
	{{forloop}} # 这是一个存在于for语法中内容 是一个dict类型有7个属性值
	{{ forloop.counter }} 
    {{ forloop.counter0 }}
    {{ forloop.revcounter }}
    {{ forloop.revcounter0 }}
    {{ forloop.first }}
    {{ forloop.last }}
    {{ forloop.parentloop }}
    # 空属性 当list为空时展示这个
    {% empty %}
    <div>arr的length==0</div>
{% endfor %}
{%%
{% csrf_token %}
这个是防止跨站点伪造请求要写form 中去
 假如nav.html是一个多个页面中的公共元素
 templates/nav.html
 是要在setting.py中加载过的路径才可以导入
{% include 'nav.html'%}
为降低代码的耦合度,实现复用
{# 我是一段注释 #}


extends 和 block 的处理逻辑
extends告诉浏览器要重载当前页面内容
block是告诉浏览器那些部分不需要重载 通过 block 名称 这个名称去判断那里不重载
注意:{% extends 'xxx.html'%}
必须写在python中提供的标签中的第一个 然后他会对之后的内容进行重载 前面的html标签不会重载

{% extends '父模板路径' %}
{% block 名称 %}
内容
{% endblock %}
extends是加载父模板
假如
'nav.html'
<div>我是nav</div>
{% block my %}
<div>我也是nav</div>
{% endblock%}
'index.html'
<div>我是index.html页面</div>
{% extends 'nav.html' %}
{% block my%}
<div>,你是index</div>
{% endblock%}
**页面最后会解析成**
<div>我是index.html页面</div>
<div>我是nav</div>
<div>,你是index</div>

接下来

自定义过滤器和标签

在manage.py同级下创建templatetags文件夹
templatetags/my_tags.py

from django import template
register = template.Library() # register名字固定
@register.filter # 自定义过滤器修饰符
def my_filter(v1,v2): # 最多两个参数
	return v1 * v2
@register.simple_tag # 自定义标签
def my_tag1(v1,v2,v3): # 多少参数都可以 可变参数还没试过
	return v1 * v2 * v3
# 可以将字符串转化为html标签的方法
from django.utils.safestring import mark_safe
@register.simple_tag
def my_html(v1, v2):
    temp_html = "<input type='text' id='%s' class='%s' />" %(v1, v2)
    return mark_safe(temp_html)

现在写好了这些自定义内容
然后要把他们挂到服务里面需要修改setting.py

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [BASE_DIR+"/templates",],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
            "libraries":{                          # 添加这边三行配置
                'my_tags':'templatetags.my_tags'   # 添加这边三行配置        
            }                                      # 添加这边三行配置
        },
    },
]

使用自定义

{# 使用前要把这个加载到html中 #}
{% load my_tags%}
{{ 11|my_filter:22 }} # 11 * 22 
{% my_tag1 11 22 33 %} # 11 * 22 * 33
{% my_html "zzz" "xxx" %} # 会返回一个input
配置静态文件

有些静态资源是要存储到服务器上的比如图片、视频 服务启动之后要通过url去访问这些资源
配置路径
在manages.py同级下创建statics文件夹
修改setting.py

STATIC_URL = '/static/' # url访问前缀 还有别名
STATICFILES_DIRS = [
	os.path.join(BASE_DIR,'statics')
]

然后就可以 通过 127.0.0.1:8000/static/文件名称 去访问静态资源

使用静态资源时可以通过url 也可以通过
{% load static %}
<img src="{% static "images/runoob-logo.png" %}" alt="runoob-logo">
{% static 文件在静态目录下的地址 %}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值