PYTHON3.Django_day02(见pdf)

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

2019-07-12_10-16-01

*******清除当前进程*******

2019-07-12_10-31-32

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 
xxx.html
  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 
urls.py
  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 
view.py
  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>
tempates.mybase.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>
tempates.myhomepage.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>
tempates.mypage2.html
  1 {% extends 'mybase.html' %}
  2 
  3 {% block page_content %}
  4 <h1>这是运动页的主页</h1>
  5 {% endblock page_content %}
tempates.page1.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="{% 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>
page3.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>
pagen.html

    示例见:
       mysite2/templates/mypage2.html
原文地址:https://www.cnblogs.com/shengjia/p/11179917.html