Django第一个程序

通过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

发表回复