目录


 

1、新建 python 虚拟环境

websitecmd
d:
cd website

进入 website 文件夹中,输入:

python -m venv djangoenv

通过执行 venv 指令来创建一个虚拟环境。djangoenv 可自己取名称,此处在 website 文件夹中会出现一个 djangoenv 文件夹。

windows用户继续输入:

djangoenv\Scripts\activate
(djangoenv) d:\website

导出项目依赖(非必须,看情况,一般不用安装依赖):

pip freeze > requirements.txt
pip install -r requirements.txt

有时,我们为了代码稳定、代码迁移等,需要获取当前 Python 工程依赖包的安装列表。使用 pip freeze 会输出所有在本地已安装的包(但不包括 pip、wheel、setuptools 等自带包),若需要输出内容与 pip list 一致,需使用 pip freeze -all。导出后,输入命令:pip install -r requirements.txt即可安装 requirements.txt 中的所有包(指定版本)。

也可以不在虚拟环境下安装,创建虚拟环境后每次还得先启动环境。

2、安装Django并新建项目

在上条命令行中输入:

回车,耐心等待安装成功,用的清华镜像,速度会比较快。安装好之后,再创建项目名称,使用命令:

django-admin startproject my_blog

website文件夹中就会出现my_blog文件夹(my_blog是Django网站项目名称,可根据自己的需求取名字,注意不要取Django或test容易引起冲突的名称)

 

3、检测Django项目是否安装成功

继续使用命令:

cd my_blog
python manage.py runserver

回车,此处会返回一个IP地址,为:http://127.0.0.1:8000/ ,将网址复制粘贴到浏览器上即可查看是否创建成功。如果要用其他端口,可以:

python manage.py runserver http://127.0.0.1:8080/

关闭命令窗口,则服务关闭。

 

4、后续打开服务

需要在cmd命令窗口中运行:

d:\website\djangoenv\scripts\activate
python d:\website\my_blog\manage.py runserver

这里先不打开项目,继续安装app。

5、创建 poll app

现在环境,一个项目已经完成,我们可以来创建这个app 页面了。

您在Django中编写的每个应用程序都包含遵循一定约定的Python包。Django提供了一个实用程序,它可以自动生成应用程序的基本目录结构,因此您可以专注于编写代码而不是创建目录。

现在我们只要进入manage.py 文件所在的目录,打开shell,输入:

python manage.py startapp polls

这会创建一个叫polls的目录,如下图所示:

6、创建视图函数

在polls文件夹下的views.py文件中创建第一个视图函数index

def index(request):
    #请求相关数据,request叫做HTTPRequest对象
    #请求相关数据都是request属性
    return render(request,'index.html')
    #render方法用来打开html文件,对文件进行模板渲染
    #第一个参数是request,
    #第二个参数是html文件路径
    #这里只写了文件名称,
    #是因为Django自动去templates文件夹下面去找html文件。
    #渲染完成之后,返回响应页面数据,最终交给wsgi中的socket将页面数据返回给客户端。

 

7、创建index.html文件

如果视图响应的是一个HTML文件,我们需要在项目目录下的templates文件夹中创建一个HTML文件index.html。如图:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>首页</h1>
<h1>哈哈,这是我的第一个网页</h1>
</body>
</html>

8、创建url路径和函数的映射关系

在项目主目录的urls.py文件中的urlpatterns中写上一下内容:

from django.contrib import admin
from django.urls import path
from polls import views
urlpatterns = [
    path('', views.index),
    path('admin/', admin.site.urls),
]

9、运行看一下结果

10、示例二:文本视图

现在打开polls/views.py 文件,然后把下面这串python 代码放入:

from django.http import HttpResponse
def index(request):
    return HttpResponse("Hello, world. You're at the polls index.")

这是Django中最简单的视图文件。为了调用这个文件,我们需要将它映射到一个URL——为此我们需要一个URLconf。为了能在polls目录中创建URLconf,我们需要创建一个名为urls.py的文件。现在所有的文件应该如下图所示:

并且在polls/urls.py文件中,放入下面这串代码:

from django.urls import path
from . import views
urlpatterns = [
    path('', views.index, name='index'),
]

下一步,在polls.urls 模块中,指出root (根) URLconf。在website\my_blog\my_blog\urls.py 文件中,加入一个导入,django.urls.include,

from django.contrib import admin
from django.urls import include, path
urlpatterns = [
    path('polls/', include('polls.urls')),
    path('admin/', admin.site.urls),
]

include()程序允许应用其他 URLconfs,可以方便使用 URLs。

现在我们已经将index视图文件和URLconfs 连接在了一起,让我们来验证下:

python manage.py runserver

在你的浏览器中,输入http://127.0.0.1:8000/polls/, 就能看到“Hello, world. You’re at the polls index.”的页面。

11、实现一个简易的登录页面

1、首先我们创建一个login.html(登录页面)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="/login/" method="post">
    <h1>这是一个登录页面</h1>
    用户名:<input type="text" name="username">
    密码:<input type="password" name="password">
    <button>提交</button
</form>
</body>
</html>

2、然后在views.py文件中定义一个login视图函数

def login(request):
    #判断是什么方式,如果是GET方式,我们就不能返回index.html页面
    #并且我们在login.html中也是定义以POST方式提交
    if request.POST == 'GET':
        return render(request,'login.html')
    
    #因为如果是GET方式提交,那么我们就跳转login.html页面(还是登录的页面)
    #如果是POST方式,那么就从登录页面(login.html)跳转到首页(index.html)
    else:
        print(request.POST)
        return render(request,'index.html')
    
# 下面是优化后的函数,可以验证用户登录状态。

def login(request):
    # return render(request,'login.html')
    #判断是什么方式,如果是GET方式,我们就不能返回index.html页面
    #并且我们在login.html中也是定义以POST方式提交
    if request.method == 'GET':
        return render(request,'login.html')

    # #因为如果是GET方式提交,那么我们就跳转login.html页面(还是登录的页面)
    # #如果是POST方式,那么就从登录页面(login.html)跳转到首页(index.html)
    else:
        print(request.POST)
        # < QueryDict: {'username': ['root'], 'password': ['root']} >
        uname = request.POST.get('username')
        pwd = request.POST.get('password')
        if uname == 'root'and pwd == 'root':
            return render(request, 'index.html')
        else:
            return HttpResponse('请输入正确的用户名或密码')

3、最后我们在urls.py文件中路由映射

from django.contrib import admin
from django.urls import path
from polls import views
urlpatterns = [
    path('', views.index),
    path('login/', views.login), # 新增的
    path('admin/', admin.site.urls),
]

4、打开网页看一下:http://127.0.0.1:8000/login/

随便输入用户名和密码试一下(我这里用户名为root 密码为root 试一下),然后点击提交看能不能跳转到首页(index.html)。我提交后出现Forbidden(403)报错了

403,不允许访问,暂时先理解为权限问题吧。是因为Django是有一步处理,就是你如果发get请求是没问题的,但是发POST请求,是有一些限制。这些限制后面再说,现在先注释下面那一行。在seethings.py文件中找到MIDDLEWARE,注释掉:django.middleware.csrf.CsrfViewMiddleware(我没有注释掉)

接下来重新运行程序,重新提交再来看看,点击提交,我们就可以看到跳转首页成功了。

 

12、其他:

15天django入门到放弃-用户登录示例

如何利用这个web框架开发网页

django中文网

 

页面用<input>让用户填入数据,然后以post的方式提交,后台判断用户提交的post内容是否正确,并给出下一步的流程。