将账号密码加入环境变量
编辑环境变量文件
1、vim ~/.bashrc
2、在文件末尾加入
export 你的环境变量名字=对应的值
3、在你运行启动服务命令的窗口执行
source ~/.bashrc (激活新的环境)
python 程序里 怎么拿环境变量
~
from os import environ
environ.get("你设置的环境变量")
~
model继承
什么时候用
当model出现很多重复的字段 我们可以考虑给他们写一个合理的抽象类
怎么用:
~~~
class Humen(models.Model):
name = models.CharField(
max_length=20,
verbose_name=’人名’
)
age = models.IntegerField(
verbose_name=’年纪’,
default=1
)
sex = models.CharField(
max_length=6,
verbose_name=’性别’
)
class Meta:
abstract = True
class Stu(Humen):
score = models.IntegerField(
verbose_name=’成绩’
)
class Teacher(Humen):
salary = models.IntegerField(
verbose_name=’工资’
)
~~~
模板的处理过程(不是很重要)
1 加载
2 渲染
原生写法
~
def get_teachers_v1(req):
# 加载模板
template = loader.get_template('teachers.html')
# print(template)
# print(dir(template))
# 拿数据
result = Teacher.objects.all()
# 渲染模板 同时也加入了数据
template_str = template.render({'teachers': result})
print(template_str)
# 将渲染得到的HTML字符串返回给请求
return HttpResponse(template_str)
~
模板语法
1 点语法
通过变量访问属性或者方法
~~~
-
{%for i in teachers%} #{{i.name}}是在访问属性
- {{i.name}}老师的工资是{{i.salary}}美金 #{{i.get_base_msg}}访问方法 不能传参数
{{i.get_base_msg}}
#{%empty%} 在数据为空的时候 显示出来 不为空 就不显示 {%empty%}请说东北话
{%endfor%}~~~
2 下标访问数组内的元素
~
{{teachers.0.get_base_msg}}
~
3 if 条件判断
~~~
格式: {% if 表达式 %}
语句
{% endif %}
{% if 表达式 %}
语句
{% else %}
语句
{% endif %}
{% if 表达式 %}
语句
{% elif 表达式 %}
语句
{% endif %}
~~~
使用实例(注意等号两边的空格)
~
{%if i.id == 2%}
~
4 乘除
~~~
语法格式:{% widthratio 数 分母 分子 %}
{%for i in teachers%}
{%widthratio i.age 4 3%}
{%endfor%}
~~~
5 整除
语法格式:{% if 你的数字|divisibleby:要整除几 %}
使用实例
~
{%for i in teachers%}
{%if i.id|divisibleby:2%}
{%endfor%}
~
6 注释:
单行 不可见 {#你想注释的内容#}
多行不可见
~
{%comment%}
你的一大堆注释
{%endcomment%}
~
7 获取循环次数
{{ forloop.counter }} 表示当前是第几次循环,从1数数
{{forloop.counter0}}表示当前是第几次循环,从0数数
{{ forloop.revcounter}}表示当前是第几次循环,倒着数数,到1停
{{forloop.revcounter0}}表示当前第几次循环,倒着数,到0停
{{ forloop.first }} 是否是第一个 布尔值
{{ forloop.last }} 是否是最后一个布尔值
8判断是否等于
{%ifequal teachers.1.id 2%}
等于
{%else%}
不等于
{%endifequal%}
9 操作
~~~
add {{ 变量 | add : 5 }}
没有减法过滤器,但是加法里可以加负数
{{ 变量 | add : -5}}
lower 将字母转小写
{{ 变量|lower }}
upper 将字母转大写
~~~
反向解析(重要)
根据命名空间和URL名字找到对应的处理逻辑 (蔡中能同学脱单的经历)
怎么做
1 在工程的urls.py
在include方法 加入namespace 来定义你的命名空间
~
url(r'^t4/', include("t4.urls", namespace="python1803"))
~
2 在项目的url.py里 加入name参数 给url指定一个名字
~
url(r"^lolstu$", get_stu, name="czn"),
~
3 前端
{%url ‘命名空间的名字:url的名字’%}
4 后端
~
def index(req):
return HttpResponseRedirect(reverse('python1803:czn'))
解释:HttpResponseRedirect 是重定向
reverse('命名空间的名字:url的名字')
~
需求:解析url路径里面的参数 去数据库对应老师
1 先去允许url 写成可变的
~
url(r"teacher/(?P\d+)/(?P\d+)", get_teacher, name='zhangsan'),
~
2 views.py里 对应的处理请求函数 要加入对应参数的占位
~
def get_teacher(req, t_id, a_id):
正常写
~
前端写法:
~
{%url 'python1803:zhangsan' t_id=2 a_id=3%}
~
后端写法
~
return HttpResponseRedirect(reverse('python1803:zhangsan', kwargs={'a_id':3, 't_id': 1}))
~
页面继承(复用)
1 在基础页面 确定占位
占了位置(挖了哪些坑)
~
1 js引用
2 CSS 引用
3 网页结构
4 额外的js css页面内代码
~
2 语法
~
{%block 名字%}
{%endblock%}
~
3 继承
~
{%extends '文件名字'%}
接下来要填坑
{%block 名字%}
写HTML
{%endblock%}
~