manage.py命令行工具 __init__.py初始化文件 settings.py项目的配置文件 urls.py项目的URL设置,网站的地址信息 wsgi.py是python应用与web服务器之间的接口,用于Django项目在服务器上的部署和上线,一般不需要修改2、创建项目应用,相当于网站的功能,每个APP代表网站的一个或多个网页,使用python manage.py startapp xxx创建
migrations用于数据库数据的迁移 __init__.py初始化文件 admin.py当前APP的后台管理系统 apps.py当前APP的配置信息 models.py定义映射类关联数据库,实现数据持久化 tests.py自动化测试的模块 views.py逻辑处理模块3、指令启动python manage.py runserver 8080设置端口为8080 4、模板路径的配置
在settings.py文件中,
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR,'templates')],
'APP_DIRS': True,
5、静态路径的配置
STATIC_URL = '/static/'
STATICFILES_DIRS=[os.path.join(BASE_DIR,'public_static'),
os.path.join(BASE_DIR,'index/index_static'),]
6、url对应关系
/login/ login
def login(request):
request.method
request.POST ->请求体
request.GET ->请求头中的URL
request.POST.getlist
return HttpResponse() -->返回字符串
return render(request,'login.html',{...}) -->函数里的参数值,模板,渲染
return redirect('要跳转的网址')
GET请求->只有request.GET中有值
POST请求->GET和POST都可以获得值
7、模板引擎中的特殊标记
for,if,列表索引.
login.html
{{name}}
def login(request):
return render(request,'login.html',{'name':'alex'})
8、练习
学员管理:
表:
班级 学生 老师
单表操作:
增删改查
多对多操作
增,删,改,查,
-
js阻止默认事件的发生
-
location.reload()重新加载
-
HttpReponse(json.dumps())将json格式转化为字符串
-
JSON.parse()将字符串转化为json
-
jQuery事件阻止默认事件发生
$(‘#addModal’).clicak(function(){
return flase;
})
-
模板渲染是在后台执行
-
$.ajax({ url:'', type:'', data:{}, datatype:'JSON',#把arg转化为json对象 success:function(arg){} })
10.Bootstrap请求头到达后台,后台提取url进行路由匹配,然后找到相应的函数(模板+数据渲染),最后再返回给用户(响应头+响应体)
一个包含CSS和JS的一个代码库
(1)样式
(2)响应式@media关键字
导航条
栅格
(3)当鼠标移动到XX样式的标签上时,其子标签.g应用到以下属性
.xx:hover .g{}
11.Django模板1.页面继承
母版:存放所有页面公用
{% block css %} {%endblock%}
...
{% block s1 %} {%endblock%}
...
{% block js %} {%endblock%}
子板:继承母版,自定义当前页面私有的东西
{% extends "layout.html "%}
{% block s1 %} fff {%endblock%}
{% block s2 %} ffffff {%endblock%}
2、函数-》自动执行
'userinfo':{'k1':'v1','k2':'v2'}
打印字典所有的key
{% for k,v in userinfo.items %}
{{k}}-{{v}}
{% endfor %}}
3、自定义函数
a.在app中创建templatetags模块
b.创建任意.py文件,例如,xx.py
#此处放置自定义的函数 from django import template register=template.Library() #自定义一个函数 @register.filter def my_upper(value): return value.upper() def my_bool(value): return False @register.simple_tag def my_lower(value): return value.lower()
c.在使用自定义simple_tag的html文件中导入之前创建的.py文件名
#在使用simple_tag的HTML文件的最上面导入
{% load xx %}
d.使用smple_tag
#filter
#-最多两个参数,方式: {{第一个参数|函数名称:"第二个参数"}}
{{name|my_upper}}
#tag
#无限制参数: {% 函数名 参数 参数%}
{% my_lower "ALEX" %}
#filter可以做条件判断
{% if name|my_bool %}
真
{%else%}
假
{% endif %}
e.在settings中配置当前app.不然django无法找到自定义的simple_tag
4、include导入
(可以导入多个,母版只能继承一次)
导入小组件
pub.html
特别漂亮的组件
标题:{{ name }}
内容:{{ name }}
test.html
{% include 'pub.html' %}
{% include 'pub.html' %}
{% include 'pub.html' %}
12.用户登录
-cookie: a.保存在浏览器端“键值对”,设置超时时间
b.服务端可以向用户浏览器端写cookie
c.客户端每次请求时,会携带cookie去
- 发送Http请求时,在请求头中携带当前所有可访问的cookie
- 响应头
- 写cookie
@xzxx
def index(request):
obj = HttpResponse('...')
obj.set_cookie(.....)
request.COOKIES.get(...)
obj.set_signed_cookie(.....)
request.get_signed_cookie(....)
set_cookie
set_cookie
key,
value='',
max_age=None,
expires=None,
path='/',
domain=None,
secure=False, Https
httponly=False 只能自Http请求中传入,js代码无法获取到
cookie签名:
obj.set_signed_cookie('ticket',"123123",salt='jjjjjj')
#去请求的cookie中找凭证
request.get_signed_cookie('ticket',salt='jjjjjj')
- 自定义cookie签名
- 装饰器装饰views中的函数
13.Django目录介绍
django-admin startproject mysite cd mysite python manage.py starapp app01 project - app01 - admin Django自带后台管理相关配置 - modal 写类,根据类创建数据库表 - test 单元测试 - views 业务处理 - app02 - app0314.路由
http://127.0.0.1:8080/edit/?nid=fff
url(r'^edit/',views.edit),
def edit(request):
request.GET.get('nid')
return HttpResponse('...')
http://127.0.0.1:8080/edit/fff
url(r'^edit/(w+)/',views.edit),
def edit(request,a1):
return HttpResponse('...')
http://127.0.0.1:8080/edit/fff/sds
url(r'^edit/(w+)/(w+)/',views.edit)
def edit(request,a1,a2):
return HttpResponse('...')
url(r'^edit/(?Pw+)/(?Pw+)/',views.edit)
def edit(request,a1,a2):
return HttpResponse('...')
终止符
http://127.0.0.1:8080/edit/
url(r'^edit/',views.edit),
http://127.0.0.1:8080/edit(这样的方式后面有没有/)
url(r'^edit$',views.edit),
伪静态
url(r'^edit/(w+).html$',views.edit),
路由别名反向生成url
url(r'^index/',views.index,name='n1'),
name根据名字反生成url
def index(request):
v=reverse('n1')
print(v)#/index/
url(r'^index/(d+)/',views.index,name='n1'),
def index(request):
v=reverse('n1',args=(1,))
print(v)#/index/1/
url(r'^index/(?Pd+)/',views.index,name='n1'),
from django.urls import reverse
v = reverse('n1',kwargs={'a1':1111})
print(v)
url(r'^login/', views.login,name='m1')
def updateinfo(request):
if request.method == 'POST':
# img = request.FILES.get('photo')
# user = request.FILES.get('photo').name
new_img = models.mypicture(
photo=request.FILES.get('photo'), # 拿到图片
user=request.FILES.get('photo').name # 拿到图片的名字
)
new_img.save() # 保存图片
return HttpResponse('上传成功!')
return render(request, 'login/lianxi.html')



