在windows下面使用 django-admin startproject mysite(项目名称)创建一个项目
E:\yqdjango>django-admin startproject mysite
这样会生成是个主要文件
运行开发服务器:Django内置的一个用于开发调试的服务器(只能处理单个的请求)不要用于网站发布
E:\yqdjango\mysite>python manage.py runserver
Performing system checks...
System check identified no issues (0 silenced).
You have 13 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
November 28, 2017 - 12:49:21
Django version 1.11.4, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
这样就在127.0.0.1:8000上运行了调试服务器。后面的开发可以不用关闭服务器,当你对项目进行修改时。这个服务器会自动检索修改进行内容更新。
修改端口和IP
E:\yqdjango\mysite>python manage.py runserver 8080
E:\yqdjango\mysite>python manage.py runserver 0.0.0.0:8080
当你指定IP时就允许非本地的连接访问
from django.http import HttpResponse
def hello(request):
return HttpResponse("hello world");
一个视图就是一个python函数,第一个参数类型是HttpRequest,返回HttpResponse(使一个python函数成为一个Django可识别视图必须满足的条件)
from django.conf.urls import url
from django.contrib import admin
from mysite.views import hello
urlpatterns = [
url(r'^hello/$', hello),
#所有指向URL/hello/的请求都由hello视图函数处理
]
urlpatterns定义了URL以及用于处理URL的代码映射关系Django能从ROOT_URLconf中找到它(新建项目时,Django默认映射关系,显示欢迎界面)
如想在URLconf中加入URL和view,只需增加映射URL模式和view功能的Python tuple即可。
python搜索路径
使用import语句时,语句导入的内容就是python所查找的系统目录清单
python查找按照当前,和url顺序查找
Django检查URL模式前默认移除申请URL开头的斜杠(URL模式通常使用正则表达式),为尾部添加斜杠(/)
python和其他的动态语言有一个重要特性:函数是作为对象传递的,而不是调用(函数是一级对象,可以像变量一样传递函数)
正则表达式:
关于404错误
URLconf只定义了单一的URL模式,处理urls.py中指定的url,当访问其他url时会出现404。因为你的UR申请在URLconf中没有定义
url(r'^$', hello),
#空串表示当前目录
这样可以为所有申请使用hello。一般用于index页面
404页面只有在开发者模式下才显示,对用户透明
Django处理请求
GET:request.GET相当于一个字典,推荐request.GET.get(‘a’,0)没有传递时默认使用0
request与网页传递参数有关,封装GET和POST
视图中的参数传递
#/add/3/4/ 这样的网址的方式
def add2(request, a, b):
浏览器输入url,django后台怎么动作的那?
所有的一切均始于setting文件(包含着所有有关这一个django项目的配置信息,其中ROOT_URLCONF,他作为URLconf告诉django这个站点中那些python模块被使用)
输入url时 django —> root_urlconf —> 顺序匹配urls —> urlpatterns —> 调用view(视图函数) — >httprequest对象作为函数第一参,开始函数 —>httpresponse返回结果 —> django转换python的对象到web response(网页内容)转HttpResponse为 HTTP response 显示web page
动态视图:内容可以变换的视图
在views.py中放入视图函数(当前日期和时间显示在网页
1.计算当前时间
2.返回包含这些值的httpresponse)
动态视图和动态URL
web应用中,url常常包含相关参数,显示时间加上时间偏移量
#这是视图函数current_time
from django.http import HttpResponse
import datetime
def current_time(request,offset):
try:
offset = int(offset);
except ValueError:
raise Http404();
#在不能转换成int的字符串中调用int()会出现valueError
now = datetime.datetime.now() + datetime.timedelta(hours=offset);
html = "It is %s,now %s"%(offset,now);
return HttpResponse(html);
这样视图函数就多出一个参数时间差,offset从匹配的URL中提取出来,捕获值重视Unicode objects,而不是简单的python字符串。但是这样有个不好的地方就是硬编码HTML在代码中。过于混杂不利于维护。
django核心理念是让URL看起来漂亮、更加清晰,所有使用正则表达式来进行urls映射
urlpatterns = [
url(r'^time/plus/(\d{1,2})/$', current_time),
]
#显示最大99个小时的偏移量
正则表达式前面的r是告诉python这是一个原始字符,不用处理里面的反斜杠使用圆括号把参数在url模式中标识出来
只有将app加入了appinstall中,Django才能在render时自动找到appinstall中列出app的templates文件
DEBUG=true时Django才能自动找到appinstall中列出app的static静态文件(图片,css等)
#一个不用的网址的重定向
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
def old_add_redirect(requset,a,b):
return HttpResponseRedirect(reverse('add',args=(a,b)))
#urls中
url(r'^add/(\d+)/(\d+)/$', calc_views.old_add2_redirect),
url(r'^new_add/(\d+)/(\d+)/$', calc_views.add2, name='add2'),