day1 回顾
Django
1. 安装
sudo pip3 install django==1.11.8
2. 创建django 项目
django-admin startproject <项目名称>
django-admin startproject mysite1
3. mysite1/
manage.py # 项目管理的主模块
mysite1/
__init__.py
settings.py # 项目配置文件
DEBUG = True
ALLOWED_HOST = []
TIME_ZONE = 'UTC' # 'Asia/Shanghai'
LANGUAGE_CODE = 'zh-hans' # 'en-us'
BASE_DIR = 当前项目所在位置的绝对路径
ROOT_URLCONF = 'mysite1.urls'
urls.py # 主路由配置文件
wsgi.py # wsgi布署的文件
URL
http :// 127.0.0.1 :8000 / path?(查询)#urls
路由:
主路由配置文件
# file : urls.py
from django.conf.urls import url
urlpatterns = [
url(r'^page', views.page_view),
# 注: 如果page匹配成功,则page1和page2略过
url(r'^page1', views.page1_view),
url(r'^page2', views.page2_view),
# /date/2008/1/12 ->date_view(req,'2008', '1', '12')
url(r'^date/(d{4})/(d{1,2})/(d+)',
views.date_view
# /person/weimingze/35
# /person/lvze/30 ->person_view(req, name="lvze", age='30')
url(r'^person/(?P<name>w+)/(?P<age>d+)',
views.person_view),
]
-------------------------------------------------------------------------------------------------------------------------------------
请求和响应
request response
请求方式
HTTP 1.0 GET/POST/HEAD
HTTP 1.1 PUT/DELETE/CONNECT/...
def xxx_view(request):
...
request.method 'GET' / 'POST'
request.GET 绑定QueryDict
request.GET[键]
request.GET.get(键, 默认值)
request.GET.getlist(键) 返回列表
request.POST 绑定QueryDict
request.POST[键]
request.POST.get(键, 默认值)
request.POST.getlist(键) 返回列表
request.path
request.META
.COOKIE
.session
Http响应
HttpResponse 对象
HttpResponse(包体的内容, status=状态码,content_type='text/html')
GET请求传参:
/page?start=1&stop=100
request.GET
PyCharm社区版调试Django程序配置
1. 选择 Add Configuration
2. 选择 左上角 + 号 选择 "Python"
1. script path 里选manage.py 的路径
2. 在 parameters 里填入runserver
*******清除当前进程*******
POST请求示例:
如果是GET请求访问 /test_post 返回表单
如果是POST请求访问 /test_post 返回提交的数据
能传递给模板的数据类型有:
int, float, bool, dict, list,
函数,对象的方法
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 </head> 7 <body> 8 <form action="/test_post" method="post"> 9 <input type="text" name="search_name"> 10 <select name="gender"> 11 <option value=1>男</option> 12 <option value=0>女</option> 13 </select> 14 <textarea name="comment" rows="5" cols="10">附言...</textarea> 15 16 <input type="submit" value="开始搜索"> 17 </form> 18 </body> 19 </html> 20
1 """mysite2 URL Configuration 2 3 The `urlpatterns` list routes URLs to views. For more information please see: 4 https://docs.djangoproject.com/en/1.11/topics/http/urls/ 5 Examples: 6 Function views 7 1. Add an import: from my_app import views 8 2. Add a URL to urlpatterns: url(r'^$', views.home, name='home') 9 Class-based views 10 1. Add an import: from other_app.views import Home 11 2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home') 12 Including another URLconf 13 1. Import the include() function: from django.conf.urls import url, include 14 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls')) 15 """ 16 from django.conf.urls import url 17 from django.contrib import admin 18 19 from . import views 20 21 urlpatterns = [ 22 url(r'^admin/', admin.site.urls), 23 url(r'^sum$', views.sum_view), 24 url(r'^test_post$', views.test_post_view), 25 url(r'^test1$', views.test1_view), 26 url(r'^test2$', views.mypage2_view), 27 url(r'^page0$', views.page0_view), 28 url(r'^page1$', views.page1_view), 29 url(r'^page2$', views.page2_view), 30 # 以下用page3 和 page/(d+) 来示意URL反向解析 31 url(r'^page3$', views.page3_view, name="page3"), 32 url(r'^pagen/(d+)$', views.pagen_view, name="pagen"), 33 ] 34 35
1 2 # file : mysite2/views.py 3 4 5 from django.http import HttpResponse 6 7 8 def sum_view(request): 9 if request.method == 'GET': 10 start = request.GET.get('start', '0') 11 stop = request.GET['stop'] 12 step = request.GET.get('step', '1') 13 start, stop, step = int(start),int(stop), int(step) 14 result = sum(range(start, stop, step)) 15 16 return HttpResponse("结果: %d" % result) 17 18 html = ''' 19 <!DOCTYPE html> 20 <html lang="en"> 21 <head> 22 <meta charset="UTF-8"> 23 <title>Title</title> 24 </head> 25 <body> 26 <form action="/test_post" method="post"> 27 <input type="text" name="search_name"> 28 <select name="gender"> 29 <option value=1>男</option> 30 <option value=0>女</option> 31 </select> 32 <textarea name="comment" rows="5" cols="10">附言...</textarea> 33 34 <input type="submit" value="开始搜索"> 35 </form> 36 </body> 37 </html> 38 ''' 39 40 def test_post_view(request): 41 if request.method == 'GET': 42 return HttpResponse(html) 43 if request.method == 'POST': 44 value = request.POST['search_name'] 45 dic = dict(request.POST) 46 return HttpResponse("search_name=" + value + str(dic)) 47 48 49 from django.template import loader 50 51 from django.shortcuts import render 52 def test1_view(request): 53 54 person = { 55 # 'name': 'tedu', 56 # 'age': 19 57 'name': '魏明择', 58 'age': 35 59 } 60 61 # 方法2 62 return render(request, 'myhomepage.html', person) 63 64 # 方法1 65 # # t绑定模板对象 66 # t = loader.get_template("myhomepage.html") 67 # # 用模板生成html 68 # html = t.render() 69 # # 返回给浏览器 70 # return HttpResponse(html) 71 72 class Dog: 73 def show_info(self): 74 return "小黄狗" 75 76 def mypage2_view(request): 77 myvar = 999 78 mystr = "hello world!" 79 mylist = ["北京",'上海', '深圳'] 80 person = {"name": "tedu", 'age':18} 81 dog1 = Dog() 82 83 def myfun1(): 84 return "函数结果!!!" 85 # myfun = lambda : "函数结果!!!" 86 87 money = 999999999 # 大于1亿富翁,大于1亿富翁10万有钱 88 89 city = ["北京",'上海', '深圳', '重庆'] 90 # city = [] 91 92 return render(request, 'mypage2.html', locals()) 93 94 # return render(request, 'mypage2.html', 95 # {'myvar': myvar}) 96 97 98 def page0_view(request): 99 return render(request, 'mybase.html') 100 101 102 def page1_view(request): 103 return render(request, 'page1.html') 104 105 106 def page2_view(request): 107 return render(request, 'page2.html') 108 109 110 def page3_view(request): 111 return render(request, 'page3.html') 112 113 def pagen_view(request, n): 114 return render(request, 'pagen.html', locals()) 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>{% block mytitle %}主页{% endblock %}</title> 6 </head> 7 <body> 8 <h1 style="background-color: blue;">登陆,注册</h1> 9 10 {% block page_content %} 11 <h1 style="background-color: orange;">主页内容</h1> 12 {% endblock page_content %} 13 14 <h1 style="background-color: gray;">请联系我们:010-88889999</h1> 15 16 </body> 17 </html>
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 </head> 7 <body> 8 <h1>姓名:{{ name }}</h1> 9 <h2>年龄:{{ age }}</h2> 10 11 </body> 12 </html>
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>传参测试</title> 6 </head> 7 <body> 8 <h5>myvar = {{ myvar }}</h5> 9 <h5>myvar + 1= {{ myvar | add:1}}</h5> 10 <h5>mystr = {{ mystr }}</h5> 11 <h5>mystr:truncatechars:10 = {{ mystr|truncatechars:10 }}</h5> 12 <h5>mystr|upper = {{ mystr|upper }}</h5> 13 <h5>mylist = {{ mylist }}</h5> 14 <h5>mylist[1] = {{ mylist.1 }}</h5> 15 <h5>person = {{ person }}</h5> 16 <h5>person['age'] = {{ person.age }}</h5> 17 <h5>myfun1() = {{ myfun1 }}</h5> 18 <h5>dog1.show_info() = {{ dog1.show_info }}</h5> 19 <h5>aaa = {{ aaa }}</h5> 20 <h5>你是: 21 {% if money > 100000000 %} 22 <b>富翁</b> 23 {% elif money > 100000 %} 24 <i>有钱人</i> 25 {% endif %} 26 </h5> 27 {% if money > 0 %} 28 <h1>钱包里有钱</h1> 29 {% endif %} 30 <select> 31 {% for c in city %} 32 <option>{{ c }}</option> 33 {% empty %} 34 <option>请添加数据</option> 35 {% endfor %} 36 </select> 37 38 <ul> 39 {% for c in city %} 40 {% if forloop.first %} 41 <li>=============</li> 42 {% endif %} 43 <li>第{{ forloop.counter }}个城市:{{ c }}</li> 44 {% endfor %} 45 </ul> 46 {% comment "我今天心情不好" %} 47 这是多行注释里的内容 48 {% endcomment %} 49 50 {# 这是一行不显示的内容 #} 51 末尾 52 53 </body> 54 </html>
1 {% extends 'mybase.html' %} 2 3 {% block page_content %} 4 <h1>这是运动页的主页</h1> 5 {% endblock page_content %}
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 </head> 7 <body> 8 <a href="{% url 'page3' %}">跳转到第3页</a> 9 <!--<a href="/pagennn/100">跳转到第100页</a>--> 10 <a href="{% url 'pagen' '100' %}">跳转到第100页</a> 11 <a href="{% url 'pagen' '999' %}">跳转到第999页</a> 12 13 </body> 14 </html>
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 </head> 7 <body> 8 <!--<a href="/page333">回到第3页</a>--> 9 <a href="{% url 'page3' %}">回到第3页</a> 10 <a href="{% url 'pagen' n %}">回到第{{ n }}页</a> 11 </body> 12 </html>
示例见:
mysite2/templates/mypage2.html