第二章:Django项目实例

1. 安装Django

pip install django 

查看django版本:

 

2. 创建Django项目

打开命令行,然后cmd到需要创建代码的目录,运行如下命令即可创建:

$ django-admin startproject mysite

 创建后项目目录如下:

mysite/

  manage.py 项目的命令行工具

  mysite/ 与项目根目录同名,存放的是项目相关的配置文件、全局路由等

    __init__.py   指定dev05为一个包

    settings.py    Django 项目的配置文件

    urls.py       Django 项目的 URL 声明,就像你网站的“目录”

    wsgi.py      作为你的项目的运行在 WSGI 兼容的Web服务器上的入口

    asgi.py wsgi.pyasgi可调用对象可以一个接一个地链接在一起,以处理web请求 

3. 创建应用 

在每个django项目中可以包含多个应用,相当于一个大型项目中的分系统、子模块、功能部件等,相互之间比较独立。 

应用和项目的区别:应用是一个专门做某件事的网络应用程序——比如博客系统,或者公共记录的数据库,或者简单的投票程序。项目则是一个网站使用的配置和应用的集合。项目可以包含很多个应用。应用可以被很多个项目使用。 

应用的创建方式如下,需要在manage.py所在目录下创建,命令如下:python manage.py startapp polls

目录结果如下:

mysite/

  manage.py

  mysite/

    __init__.py   

    settings.py    

    urls.py       

    wsgi.py      

    asgi.py

  polls/

    __init__.py

    admin.py

    apps.py

    models.py

    tests.py

    views.py

    migrations/

      __init__.py

4. 编写路由

路由都在urls中,它将浏览器输入的url映射到相应的业务处理逻辑。

5. 编写业务处理逻辑

业务处理函数一般都放在views.py文件中。

 

  通过如上2步操作,可以实现将test/url指向test()函数,它接收到请求后,会返回“hello world”字符串。 

6. 运行web服务

如上配置后,通过python manage.py runserver可以启动web服务,启动后输入链接http://127.0.0.1:8000/test/ 404报错,是因为找不到对应服务,需要将新创建的应用添加到应用的配置里面,即:mysite/setting/INSTALLED_APPS,具体如下:

  再次启动:

6.1 提示信息

启动时,会提示: 

通过运行 python manage.py migrate可以将django自带数据库属性迁移过来,即创建一些表

 6.2 端口号及IP

默认情况下,runserver命令会将服务器设置为监听本机内部ip8000端口。如果需要修改端口时,可以通过命令行参数修改,即:python manage.py runserver 8080 ;如果需要监听本机ip时,可以通过如下命令执行:python manage.py runserver 本机IP:端口号。

7. 返回html文件

html文件一般统一放到templates(这个名称最好不要修改)中,具体显示如下:

  修改对应的test()函数,将返回值定向到html文件,具体如下:

 

此时输入http://127.0.0.1:8000/test/,会提示test.html不存在

  那是因为django不知道html的存放路径,所以需要修改setting中文件的配置项,具体如下:

  DIRS输出具体路径如下:

  重新启动后,再次查看,即可展示test.html对应文件信息。

8. js文件

静态js文件,可以通过文件添加,也可以用在线文件,目前使用在线文件,加载方式如下:

9. 发送接收数据

设计一个页面,输入用户名和密码,点击提交后,展示对应的用户名和密码。

9.1 form表单格式实现

9.1.1.返回结果为字符串

 test.html:

{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>mysite测试</title>
    <script src="http://libs.baidu.com/jquery/2.1.4/jquery.min.js"></script>
</head>
<body>
    <h1>输入用户名密码:</h1>
    <form action="/getinfo/" method="POST">
        <input type="text" name="username"/>
        <input type="password" name="password"/>
        <input type="submit" value="提交"/>
    </form>
</body>
</html>

views.py

from django.shortcuts import render
from django.shortcuts import HttpResponse

# Create your views here.


def test(request):
    # return HttpResponse("hello world!")
    return render(request,'test.html')

def getinfo(request):
    username = request.POST.get("username")
    password = request.POST.get("password")
    responsestr = "username = {},password = {}".format(username,password)
    print(responsestr)
    return HttpResponse("hello world!")

urls.py

from django.contrib import admin
from django.urls import path
from polls import views as views1

urlpatterns = [
    path('admin/', admin.site.urls),
    path('test/', views1.test),
    path('getinfo/', views1.getinfo),
    # path(r'^test/', views1.test)
]

  

  9.1.2.返回结果为html

test.html 

{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>mysite测试</title>
    <script src="http://libs.baidu.com/jquery/2.1.4/jquery.min.js"></script>
</head>
<body>
    <h1>输入用户名密码:</h1>
    <form action="/getinfo/" method="POST">
        <input type="text" name="username"/>
        <input type="password" name="password"/>
        <input type="submit" value="提交"/>
    </form>
</body>
</html>

 getinfo.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>用户名和密码展示结果</title>
</head>
<body>
    <p>用户名:{{data.user}}</p>
    <p>密码:{{data.pwd}}</p>
<!--    表格格式实现如下:-->
<!--    <table>-->
<!--        <thead>-->
<!--            <th>用户名</th>-->
<!--            <th>密码</th>-->
<!--        </thead>-->
<!--        <tbody>-->
<!--            <td>{{data.user}}</td>-->
<!--            <td>{{data.pwd}}</td>-->
<!--        </tbody>-->
<!--    </table>-->
</body>
</html>

views.py

from django.shortcuts import render
from django.shortcuts import HttpResponse

# Create your views here.
user_list = []


def test(request):
    # return HttpResponse("hello world!")
    return render(request,'test.html')

def getinfo(request):
    username = request.POST.get("username")
    password = request.POST.get("password")
    temp = {"user":username,"pwd":password}
    responsestr = "username = {},password = {}".format(username,password)
    print(responsestr)
    return render(request,'getinfo.html',{"data":temp})

urls.py

from django.contrib import admin
from django.urls import path
from polls import views as views1

urlpatterns = [
    path('admin/', admin.site.urls),
    path('test/', views1.test),
    path('getinfo/', views1.getinfo),
    # path(r'^test/', views1.test)
]

  

9.2 table样式实现

一般ajax都是处理后端数据的,很少用来渲染前端页面,所以table样式实现,以返回字符串形式为例说明。

test.html 

{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>mysite测试</title>
    <script src="http://libs.baidu.com/jquery/2.1.4/jquery.min.js"></script>
</head>
<body>
    <h1>输入用户名密码:</h1>
    <input type="text" id="username" name="username"/>
    <input type="password" id="password" name="password"/>
    <input type="button" value="提交" onclick="getusername()"/>

    <script>
        function getusername(){
            var usename = $("#username").val()
            var password = $("#password").val()
            $.ajax({
                url: '/getinfo/',
                data: {'usename':usename,'password':password},
                type: 'POST',
                dataType: 'json',
                success: function(res){
                    console.log(res)
                }
            })
            }
    </script>
</body>
</html>

 getinfo.html 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>用户名和密码展示结果</title>
</head>
<body>
    <p>用户名:{{data.user}}</p>
    <p>密码:{{data.pwd}}</p>
<!--    表格格式实现如下:-->
<!--    <table>-->
<!--        <thead>-->
<!--            <th>用户名</th>-->
<!--            <th>密码</th>-->
<!--        </thead>-->
<!--        <tbody>-->
<!--            <td>{{data.user}}</td>-->
<!--            <td>{{data.pwd}}</td>-->
<!--        </tbody>-->
<!--    </table>-->
</body>
</html>

 views.py 

from django.shortcuts import render
from django.shortcuts import HttpResponse
from django.shortcuts import HttpResponseRedirect

# Create your views here.

def test(request):
    # return HttpResponse("hello world!")
    return render(request,'test.html')

def getinfo(request):
    username = request.POST.get('usename')
    password = request.POST.get('password')
    # temp = {"user":username,"pwd":password}
    responsestr = "username = {},password = {}".format(username,password)
    print(responsestr)
    return HttpResponse(responsestr)

 urls.py 

from django.contrib import admin
from django.urls import path
from polls import views as views1

urlpatterns = [
    path('admin/', admin.site.urls),
    path('test/', views1.test),
    path('getinfo/', views1.getinfo),
    # path(r'^test/', views1.test)
]

  

 

 

原文地址:https://www.cnblogs.com/like1824/p/15305549.html