404:有域名无路由。路由是网址中
域名后
、
?前
的那段;?后是参数,参数中15开头的13位数字通常是时间戳。
urls.py、views.py、xxxx.html中,所出现的各种相对路径:
拼接的是
IP地址(或域名):①路由函数内
开头无/的路由首参;②视图函数或html内
开头无/的项目根目录(即与manage.py同级的文件夹或文件);③视图函数或html内
开头是/的
网址;
拼接的是
路由首参等IP之后的半截网址:视图函数或html内,①
开头无/的网址;②
开头是/的项目次级目录(即与manage.py同级的某app文件夹下的子文件夹或子文件)。所以
路由函数内的
各首参网址,开头无/,结尾却要有/,不然与之对应的视图函数或html内,开头无/的各相对路径,拼接不过来。
1级路径是第1个/前的部分,指IP域名或位于项目根目录下的本地文件夹;2级路径是前2个/之间的部分,项目根目录下的某app文件夹下的2级文件夹如static,
不论作为非路由网址还是本地2级文件夹,前后都要有/;3级路径如static下的文件夹css,开头无/。
Eg:settings.py底部的STATIC_URL = '
/static
/',前后都有/的原因:
①本地文件夹和网址的双重身份:static作为本地文件夹,放在project的 某个app下而非project根下,所以开头得有/;作为写在路由函数之外的网址, 拼接的是IP域名,开头同样要求有/。
②css等第3级子文件夹或子文件,并非拼接在域名后,按拼接语法开头不能有/,故网址/static, 结尾得补个/,才能接收css…等第3级路径拼接在其末尾。
①本地文件夹和网址的双重身份:static作为本地文件夹,放在project的 某个app下而非project根下,所以开头得有/;作为写在路由函数之外的网址, 拼接的是IP域名,开头同样要求有/。
②css等第3级子文件夹或子文件,并非拼接在域名后,按拼接语法开头不能有/,故网址/static, 结尾得补个/,才能接收css…等第3级路径拼接在其末尾。
**************************分割线**************************
django1.6自定义markdown过滤器:
http://www.zhidaow.com/post/django-custom-template-tag-markdown
设计个有远见的数据库=项目完成了一半=几千行代码。让当前的代码活事半功倍,而且减少日后修改的次数和面积。数据库的架构是企业的核心机密,同行业的竞争对手看到你的数据库架构,就能山寨出来一个高度相似的项目。
**************************分割线**************************
三大web框架的不同请求的各自写法:
tornado用方法
self.get_argument(
'name值'
)
,flask和django都用字典:request.xxx['name值']
①tornado:不论是get还是post请求,
都是self.get_argument('name属性的值',default=None)
②flask:get请求用
request.args['
name值'],post
请求用
request.form['name值'];
③django:
request.GET['type为
text的input标签的
name属性的值'],结果在网址尾;
request.POST[
'name值'],
request.FILES['type为
file……'],它俩的结果都藏在postData中;
request.META['某个请求头如
HTTP_REFERER']
**************************分割线**************************
html模板:①
{{变量}};
②
{% 语法如
if、for…in…、
with…as…
等;或函数如
load static from staticfiles、
csrf_token
等
%}
django和flask的 html模板中的 循环或判断:
(tornado例外,结尾全是
{% end %},字典用d
['
key
']
而非d
.
key)
{% for country in countries %}
{% endfor %}
****************************************分割线****************************************
django做个电影网站:
①E盘下建个movie文件夹→PyCharm新建项目选Django→location改为E:\movie→More Settings的Application写个dy
;
(注:PyCharm新建好django项目后,启动项目是在settings.py等界面,按绿方块dj+根目录如movie右侧的绿三角,而非我所自定义并习惯了的F5键Run context configuration)
**************************分割线**************************
②项目文件夹movie:
***************分割线***************
配置文件settings.py:
DEBUG = True在部署到Linux服务器之前要改为False。
INSTALLED_APPS尾已自动添加了dy…,不理会;若新建应用,则模仿dy…添加。
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
DATABASES = {
}
***************分割线***************
路由文件(各正则网址)urls.py:
from django.conf.urls import url
from django.contrib import admin
from dy import views
urlpatterns = [
]
**************************分割线**************************
③应用文件夹dy:
***************分割线***************
让Python和数据库交互(俗称ORM)的文件models.py:
在
E:\movie路径下进入cmd:python manage.py inspectdb > dy/models.py
回车后,
settings.py中所配置的数据库movie中的各表,会以class的形式(首字母大写,去除表名中的_),自动写入
models
.py
***************分割线***************
各路由网址呈现什么内容的文件views.py:
from django.shortcuts import render
from django.http import HttpResponse
#网页显示字符串,太简陋,一般不用它
from dy.models import DyDymodels
#导入
movie库中
电影数据源所在的那张表
def chengy(request):
def index(request):
***************分割线***************
应用文件夹dy下新建个templates文件夹,其内新建个index.html:
<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
<form action="/" method="post">
</form><br>
{% if
movies
%}
{% endif %}
</body>
</html>
****************************************分割线****************************************
开发网盘:
①E盘下建个wangpan文件夹→……Application写个disk;
***************分割线***************
②项目文件夹wangpan:
__init__.py:
import pymysql
pymysql.install_as_MySQLdb()
settings.py:
DATABASES = {
}
urls.py:
from django.conf.urls import url
from django.contrib import admin
from disk import views
urlpatterns = [
]
***************分割线***************
③应用
文件夹disk:
models.py:
from django.db import models
class FileInfo(models.Model):
在
E:\wangpan进入cmd,依次执行如下两句,用models.py的各类,生成mysql的网盘库的各表:
python manage.py makemigrations
python manage.py migrate
******分割线******
views.py:
from django.shortcuts import render
from django.http import HttpResponse,HttpResponseRedirect
import hashlib
from disk.models import FileInfo
def index(request):
def upload(request):
def content(request,fileMd5):
def download(request):
***************分割线***************
④index.html:
<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
<form action="
/upload/" method="post" enctype="multipart/form-data">
</form>
</body>
</html>
content.html:
<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
<li>文件名:{{ fileName }}</li>
<br>
<!--换行符-->
<li>文件大小:{{ fileSize }}</li>
<br>
<li><a href="{{ fileUrl }}">点击下载</a></li>
</body>
</html>
****************************************分割线****************************************
小说网站:
①E盘下建个novel文件夹→……Application写个xs;
***************分割线***************
②
settings.py:
DATABASES = {
}
urls.py:
from django.conf.urls import url
from django.contrib import admin
from xs import views
urlpatterns = [
]
***************分割线***************
③
models.py:
在
E:\novel路径下进入cmd:
python manage.py inspectdb > xs/models.py
views.py:
from django.shortcuts import render
from xs.models import NovelCopy
def index(request):
***************分割线***************
④index.html:
{% load staticfiles %}
<!--若static文件夹及settings.py末尾均改了名,html中只需改这1处-->
<!doctype html>
<html>
<body>
<div class="full-pic"></div>
<!--===== Full Screen BG =====-->
<header class="header"> <!--===== Begin Header =====-->
</header>
<!--===== Begin Main =====-->
<section class="main"><div class="main-wrap wrap1000"><div class="hot-section"><div class="hot-content">
<!--
|safe把空格、换行等标点转为正常字符;
|chuncatechars:'数字',把超出的字数以仨点替之-->
<footer class="footer"> <!--=====Begin Footer=====-->
<script src="
{% static 'js/index.js' %}"></script>
<!-- Main Plugin -->
</body></html>