通过PyCharm可以直接创建基于django的项目,会在线downloads,在创建项目的时候,会有几项自己配置
Location:项目路径E:\jd_work
Interpreter:python可执行程序的路径
Application name:构建的应用程序的名字,如app1
创建之后目录E:\jd_work下面有文件夹jd_work,app1,templates和文件manage.py
如果是用命令行的方式创建应用,可执行命令:
python manage.py startapp app1
使用django,页面的内容是通过view function视图函数产生,URL定义在URLconf中;下面创建一个基于django的页面,输出Hello World
1:视图函数
在jd_work/app1/目录下有一个python文件views.py,假如下面代码
from django.http import HttpResponse # Create your views here. def hello(request): return HttpResponse("Hello World")
这里从django.http模块里导入了HttpResponse类;定义了一个名为hello的视图函数,有一个参数request,它是触发这个视图,包含有当前WEB请求信息的对象,是类django.http.HttpRequest的一个实例,虽然这里参数request不做任何事情,但必须是视图函数的第一个参数;这个函数内容返回一个HttpResponse对象,对象包含了本文“Hello World”
这里说的通俗电:一个视图就是python的一个函数,这个函数第一个参数类型是HtppRequest,返回了一个HttpResponse实例
做完了这一步,应该可以看到欢迎页面,但是看不到Hello World,运行了一下,爆了一个错误
You have unapplied migrations; your app may not work properly until they are applied. Run 'python manage.py migrate' to apply them
既然说要执行python manage.py migrate,就单独先执行一下这个python脚本,带上参数
E:\python\python.exe E:/jd_work/manage.py migrate Operations to perform: Synchronize unmigrated apps: staticfiles, messages Apply all migrations: admin, contenttypes, auth, sessions Synchronizing apps without migrations: Creating tables... Running deferred SQL... Installing custom SQL... Running migrations: Rendering model states... DONE Applying contenttypes.0001_initial... OK Applying auth.0001_initial... OK Applying admin.0001_initial... OK Applying contenttypes.0002_remove_content_type_name... OK Applying auth.0002_alter_permission_name_max_length... OK Applying auth.0003_alter_user_email_max_length... OK Applying auth.0004_alter_user_username_opts... OK Applying auth.0005_alter_user_last_login_null... OK Applying auth.0006_require_contenttypes_0002... OK Applying sessions.0001_initial... OK Process finished with exit code 0
再运行一把,继续报错
Error: [Errno 10013]
搜索了一下,意思好像是8000端口被占了,神了,我就开了kugou和qq,难不成是kugou,关掉,再运行程序,好了,果然是kugou占用了端口,将kugou重启下就行啦
2:URLconf
目前jd_work项目对hello视图仍然一无所知,需要通过一个详细描述的URL来显式告诉它并且激活这个视图
URLconf就像是Django所支撑网站的目录一样,本质是URL模式以及要为该URL模式调用的视图函数之间的映射表;以这种方式告诉django,对于哪个URL应该调用哪段代码,比如用户访问/foo/的时候,调用视图函数foo_view(),这个视图函数存放在python模块文件view.py中
这里的URLconf就是创建项目的时候产生的urls.py,它存在于项目jd_work目录下,而不是新建的应用app1下面
这里的urls应该跟web.py里的一个意思,第一个参数是正则表达式匹配路径,第二个参数是类,也就是这里app1下面view.py里的hello类
from django.conf.urls import include, url from app1.views import hello urlpatterns = [ # Examples: # url(r'^$', 'jd_work.views.home', name='home'), # url(r'^blog/', include('blog.urls')), #url(r'^admin/', include(admin.site.urls)), url(r'^hello/$','hello') ]
这里就按照注释的例子填写好了,web.py里是一个元组,这里好像是函数的两个参数,这里意思就是URL里最后带/hello/的都由app1里面views.py里面class hello这个类来处理
页面输入127.0.0.1:8000/hello/,出乎意料报了一行错误:
Could not import 'hello'. The path must be fully qualified.
看样子应该是python的搜索路径找不到hello这个类
将url那行改成绝对路径就行了
url(r'^hello/$','app1.views.hello')
页面输入127.0.0.1:8000/hello/,页面就会输出Hello World