Python学习笔记Day18 - Django
快速开发组件
BootStrap (***最精美,模板多nifty)
- css
- js
学习 BootStrap 规则
一、响应式
@media (min-width:900px){
.c2{}
}
二、图标、字体
@font-face 指定图标字体文件
使用时使用代号
三、基本使用
导入js
导入bootstrap
css:{
color:red !important; #加!important表示不管先后顺序,一定会应用
}
bxslider轮播图,引用它的css和js,
========> 偏于后台管理
jQueryUI (*略推荐)
- css
- js
学习 jQueryUI 规则
EasyUI
- css
- js
在官网下easyUI包,查demo,复制源码,更改css,js链接
easyUI的源码和html代码不一致,不方便修改,不推荐
WEB框架
本质是socket
MVC:对文件夹分类
Model View Controller
数据库 模板文件 业务处理(函数)
MTV:
Model Template View
数据库 模板文件 业务处理
MVC、MTV,只是文件夹命名不同
Django
==用python开发web最齐全的框架=
基于MTV框架
http://www.cnblogs.com/wupeiqi/articles/5237704.html
1. 创建Django工程
-
执行终端命令
django-admin startproject 【工程名称】
也可从Pycharm等IDE创建,不用重复此步骤,本质上都是自动执行上述命令
-
其他常用命令:
python manage.py runserver 0.0.0.0
python manage.py startapp appname
python manage.py syncdb
python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser -
程序目录:
【工程文件夹】
- 【同名子文件夹】 # 对整个程序进行配置
- init
- settings # 配置文件
- wsgi # 遵循WSIG规范,创建socket,uwsgi + nginx
- url # URL对应关系
def hello(request):
return HttpResponse('hello')
urlpatterns = [
path('s1/',hello)
]
- manage.py # 管理Django程序:ORM对象
- python manage.py
- python manage.py startapp xx
- python manage.py makemigrations
- python manage.py migrate
2. 运行Django功能
python manage.py runserver 127.0.0.1:8001
3. 创建app文件夹
-
配置文件夹
cd 工程名
python manage.py startapp xxxx.... -
app目录:
migrations 数据修改表结构,每次表结构修改都会记录在一个文件中
admin Django为我们提供的后台管理功能(包括登录、权限管理、分组、搜索)
apps 配置当前app
models ORM,写指定的类 通过命令可以创建数据库结构
tests 单元测试
views *** 业务代码
4. 配置模板的路径
放置html,一般已自动创建 /./settings
TEMPLATES = [{
'DIRS': [os.path.join(BASE_DIR, 'templates')],
},]
5. 创建并配置静态目录
-
创建/static,放置css,js,image等静态文件
/./settings
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'), # 不加逗号会报错
) -
在html中导入css,js
6. 跨站请求伪造csrf禁用 (正式项目不需此步,但要在html中声明csrf_token)
/./settings
middlerware # 注释 csrf
'django.middleware.csrf.CsrfViewMiddleware',
7. 定义路由规则url
/./url.py
1. 要在url里导入app
2. path('home/',views.home),
- url里可不加/,但要与引用处保持一致。
- 建议加上,访问时没有则自动加/
-
Django生命周期:
用户请求 ->> 路由 ->> 视图函数 ->> templates(html)、static(js,css)
url.py app.views.py
8. 定义视图函数views
/app/views.py
def func(request):
request.method GET / POST (大写)
========== GET 获取数据===========
http://127.0.0.1:8009/home?nid=123&name=alex
request.GET.get('',None) # 获取请求发来的数据,没有则返回none
========== POST 提交数据==========
request.POST 包含用户提交的数据字典,以name字段为key
request.POST.get('')
======== 返回数据 ========
return HttpResponse('
return render(request, "HTML模板的路径",{'形参': 实参}) # 获取html文件返回
return redirect('只能填URL') # 重定向
- 也可填本地url:'/home' 前面的/代表本地的url前缀
9. 模板渲染
-
Django中特殊的模板语言
-
{{ 变量名 }}
视图函数返回数据时将{{}}替换为相应的值
return render(request, "index.html", {
'current_user': "alex",
'user_list': ['alex','eric']
'user_dict': {'k1': 'v1', 'k2': 'v2'}
})
{{current_user}}
-
For循环
{% for row in user_list %}
- {{ row }}
-
用 "索引" 取列表(0)或字典(key)里的值
-
if条件判断
{% if age %}
有年龄
{% if age > 16 %}
老男人
{% elif age < 3 %}
...
{% else %}
小鲜肉
{% endif %}
{% else %}
无年龄==, !=, >=, <=, >, <
and, or, not, in, not in -
获取当前用户:
{{ request.user }}
-
如果登陆就显示内容,不登陆就不显示内容:
{% if request.user.is_authenticated %}
{{ request.user.username }},您好!
{% else %}
请登陆,这里放登陆链接 -
获取当前网址:
{{ request.path }}
-
获取当前 GET 参数:
{{ request.GET.urlencode }} # keywords=131;time_filter=True
-
获取referer
request.META['HTTP_REFERER']
- 获取key
{% for row in k2.keys %}
- 获取value
{% for row in k2.values %}
- 获取key和value
{% for k,v in k2.items %}
- for循环里获取当前循环次数
forloop.counter 索引,从 1 开始算
forloop.counter0 索引,从 0 开始算
forloop.revcounter 索引,从最大长度到 1
forloop.revcounter0 索引,从最大长度到 0
forloop.first 当遍历的元素为第一项时为真
forloop.last 当遍历的元素为最后一项时为真
forloop.parentloop.xxx 用在嵌套的 for 循环中,获取上层循环的 forloop
作业
XXXX管理:
SQLAlchemy
-
主机管理表(8列):
IP
端口
业务线
... -
用户表:
用户名
密码 -
功能:
1、登录
2、主机管理页面
- 查看所有的主机信息(4列)
- 增加主机信息(8列) ** 模态对话框
3、查看详细
url:
"detail" -> detaildef detail(reqeust):
nid = request.GET.get("nid")
v = select * from tb where id = nid
...
4、删除
del_host -> delete_hostdef delete_host(request):
nid = request.POST.get('nid')
delete from tb where id = nid
return redirect('/home')
博客
-
KindEditor
- beautifulsoup4对标签进行过滤
- 单例模式
-
事务操作
- from django.db import transaction
-
筛选条件
- 利用数据库内置函数实现筛选
作业:
- 示例
- 评论和点赞
pip3 install beautifulsoup4
问题
1. table文字不换行
- 给相应td添加 white-space:nowrap; 这个属性是设置文字强制不换行
- 或者在td内添加div标签,默认不换行
2. 设置STATIC_URL, STATICFILES_DIRS, STATIC_ROOT的区别
-
STATIC_URL='/static/'这个static 是在Django 具体APP下建立的static目录,用来存放静态资源。
-
STATIC_ROOT = os.path.join(BASE_DIR, 'collect_static')# BASE_DIR 是项目的绝对地址STATIC_ROOT 是在部署静态文件时(pyhtonmanage.pycollectstatic)所有的静态文静聚合的目录,STATIC_ROOT要写成绝对地址
STATIC_ROOT 是在部署的时候才发挥作用,django会把所有的static文件都复制到STATIC_ROOT文件夹下 -
STATICFILES_DIRS=(os.path.join(BASE_DIR, "common_static"),)# 不加逗号会报错STATICFILES_DIRS 一般用来设置通用的静态资源,对应的目录不放在APP下,而是放在Project下,且非必须.
STATICFILES_DIRS告诉django,首先到STATICFILES_DIRS里面寻找静态文件,其次再到各个app的static文件夹里面找
(注意, django查找静态文件是惰性查找,查找到第一个,就停止查找了)
具体在模板文件中访问的时候,都是统一用:/static/资源名的方式,就可以访问到资源
不论具体的目录是APP下的static,还是project下的common_static, 都可以用/static/资源名的方式访问到。
为增强可移植性,在模板中可以用:STATIC_URL来代替具体的/static/来设置资源路径,但是需要在settings.py中2个地方进行设置,否则会发生取不到资源的错误:
INSTALLED_APPS 中,加入 'django.contrib.staticfiles'
TEMPLATES 中,context_processors中,加入django.template.context_processors.static
模板中调用时:

https://blog.csdn.net/jj546630576/article/details/78606531
3. 在Django中完整地删除一个App
-
删除models.py
无论是删除一个单独的model还是删除整个App,都需要首先删除models.py文件中的模型。
确认没有其他文件引用models.py中的类。
迁移或者删除你的数据库,Django提供了简便的方法方便用户删除某App下的所有数据(Django 1.7)。
python manage.py migrate app1 zero
删除models.py中的数据模型。
-
删除App
再次确认其他App中没有引用此App的文件
删除整个App文件夹
在settings.py的Installed Apps中移除该app。
4. 修改完数据后可直接用redirect刷新页面(属于get方式),比用render再传一次参数要方便
组合搜索
-
利用url传参给views里的kwargs,利用models.XX.filter筛选id
-
将当前kwargs传给模板,获取当前url,达成组合搜索
-
利用simpletag写小模板,将判断代码写在后台.py文件中

浙公网安备 33010602011771号