python&&Django框架&&完整示例一

Hi ! 这是一个作业示例

CMD.exe创建Django项目

#首先,切换到你存放项目的目录下。
#其次,执行以下命令,创建一个Django项目。此处我创建的项目名称为LearnDjangoDemoT
D:\backupAll\eclipseRoot>django-admin.py startproject LearnDjangoDemoT

#此时,当前目录出现了一个新的项目文件夹
D:\backupAll\eclipseRoot>dir
 D:\backupAll\eclipseRoot 的目录
2019/09/23/周一  23:18    <DIR>          .
2019/09/23/周一  23:18    <DIR>          ..
2019/09/09/周一  20:35    <DIR>          .metadata
2019/09/23/周一  23:18    <DIR>          LearnDjangoDemoT

#进入并查看项目根目录都有啥
D:\backupAll\eclipseRoot>cd LearnDjangoDemoT
D:\backupAll\eclipseRoot\LearnDjangoDemoT>dir
 D:\backupAll\eclipseRoot\LearnDjangoDemoT 的目录
2019/09/23/周一  23:18    <DIR>          .
2019/09/23/周一  23:18    <DIR>          ..
2019/09/23/周一  23:18    <DIR>          LearnDjangoDemoT
2019/09/23/周一  23:18               657 manage.py

#在项目根目录下创建一个app,此处我创建的app名称为web。一个Django项目总是由许多不同功能的app组成
D:\backupAll\eclipseRoot\LearnDjangoDemoT>python manage.py startapp web

#此时,项目根目录下出现了一个新的app文件夹。
D:\backupAll\eclipseRoot\LearnDjangoDemoT>dir
 D:\backupAll\eclipseRoot\LearnDjangoDemoT 的目录
2019/09/23/周一  23:19    <DIR>          .
2019/09/23/周一  23:19    <DIR>          ..
2019/09/23/周一  23:19    <DIR>          LearnDjangoDemoT
2019/09/23/周一  23:18               657 manage.py
2019/09/23/周一  23:19    <DIR>          web
               1 个文件            657 字节
               4 个目录  6,483,136,512 可用字节

Django的配置文件配置

此处以eclipse软件示例Django项目的开发过程

打开eclipse软件导入Django项目

在这里插入图片描述
原始Django项目框架图
在这里插入图片描述

增加新目录template和static并配置settings.py文件

templates:存放html文件
static:存放静态文件
在这里插入图片描述
配置settings.py文件
settings.py
在这里插入图片描述
在这里插入图片描述

登录功能

在templates目录下的web目录内创建login.html文件作为登录的web页,(若无template目录则手动创建即可)
在这里插入图片描述
编辑login.html文件并设置而login.html文件使用UTF-8编码
notepad++设置方法为:“编码”》使用UTF-8编码“”

<!doctype html>
<html>
    <head>
	    <!--对页面编码进行设置-->
	    <meta http-equiv="content-type" content="text/html;charset=utf-8">
		<!--兼容IE6浏览器-->
		<meta http-equiv="X-UA-Compatible" content="IE=Edge">
		<title>demo 10</title>
		<style>
			.hide{
			    display:none;
			}
			.clearfix:after{
			    content:".";
				display:block;
				height:0;
				clear:both;
				visibility:hidden;
			}
		</style>

	</head>
	<body>
	    <form action="/web/login/" method="POST">
		    <div>
			    <div>
				    <input name='username' placeholder="用户名" />
				</div>
			    <div>
					<input name='password' placeholder="密码" />
				</div>
			    <div>
				    <input type='submit' value="提交" />
					<label style="color:red;">{{status}}</label>
				</div>
			</div>
		</form>


		<!--引入jQuery文件-->
	    <script src="jquery-1.11.0.min.js"></script>
	    <script type="text/javascript">

		</script>
	</body>
</html>

在eclipse软件中更改项目的文本编码
eclipse软件设置方法为:鼠标右击项目名称LearnDjangoDemoT》“Properties”》“Resource”》“Text file encoding”》点击“Other”》选择“UTF-8”》”Apply”》“Apply and Close”
在这里插入图片描述

配置主路由系统

编辑项目LearnDjangoDemoT下的》LearnDjangoDemoT目录下的》urls.py文件
在这里插入图片描述

配置子路由系统

编辑项目LearnDjangoDemoT下的》web目录下的》urls.py文件(urls.py文件默认是不存在的,需要从LearnDjangoDemoT目录下复制一份urls.py文件到web目录下)
在这里插入图片描述

在web目录下的models.py文件中创建数据库类

from django.db import models
# Create your models here.
#用户类型:包含普通管理员、超级管理员等
class UserType(models.Model):
    name = models.CharField(max_length=50)
#用户信息:包含用户名、密码等
#ForeignKey("UserType"):每一个用户必须具有一个用户类型
class UserInfo(models.Model):
    username = models.CharField(max_length=50)
    password = models.CharField(max_length=50)
    email = models.EmailField()
    user_type = models.ForeignKey(to='UserType',on_delete=models.CASCADE )
class UserGroup(models.Model):
    GroupName = models.CharField(max_length=50)
    user = models.ManyToManyField('UserInfo')
#资产表:
class Asset(models.Model):
    hostname = models.CharField(max_length=256)
    ip = models.GenericIPAddressField()
    user_group = models.ForeignKey(to='UserGroup',on_delete=models.CASCADE )

在settings.py文件中配置数据库连接配置

在这里插入图片描述
在这里插入图片描述

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'day12',
        'USER': 'root',
        'PASSWORD': '123456',
        'HOST': '',
        'PORT': '',
    }
}
启动mysql数据库》手动创建数据库day12
D:\backupAll\eclipseRoot\LearnDjangoDemoT>mysql -uroot -p
Enter password: ******
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 142
Server version: 8.0.17 MySQL Community Server - GPL
#查看当前数据库
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sakila             |
| sys                |
| world              |
+--------------------+
8 rows in set (0.00 sec)
#创建新数据库day12
mysql> create database day12 ;
Query OK, 1 row affected (0.01 sec)
#此时,新数据库day12创建成功
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| day12              |
| information_schema |
| mysql              |
| performance_schema |
| sakila             |
| sys                |
| world              |
+--------------------+
9 rows in set (0.00 sec)
在Django项目根目录下执行cmd命令创建web models.py文件中定义的数据库表
D:\backupAll\eclipseRoot\LearnDjangoDemoT>dir
 D:\backupAll\eclipseRoot\LearnDjangoDemoT 的目录
2019/09/24/周二  13:11    <DIR>          .
2019/09/24/周二  13:11    <DIR>          ..
2019/09/23/周一  23:52               387 .project
2019/09/23/周一  23:52               323 .pydevproject
2019/09/24/周二  11:08    <DIR>          .settings
2019/09/24/周二  13:11                 0 db.sqlite3
2019/09/23/周一  23:19    <DIR>          LearnDjangoDemoT
2019/09/23/周一  23:18               657 manage.py
2019/09/23/周一  23:47    <DIR>          static
2019/09/24/周二  13:17    <DIR>          templates
2019/09/24/周二  14:59    <DIR>          web
               4 个文件          1,367 字节
               7 个目录  6,482,362,368 可用字节
##
D:\backupAll\eclipseRoot\LearnDjangoDemoT>python manage.py makemigrations
Migrations for 'web':
  web\migrations\0001_initial.py
    - Create model UserType
    - Create model UserInfo
    - Create model UserGroup
    - Create model Asset
##
D:\backupAll\eclipseRoot\LearnDjangoDemoT>python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... 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 auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying sessions.0001_initial... OK
此时,再次查看数据库day12,数据库day12里面出现了定义的表

在这里插入图片描述

在views.py文件内创建login方法

在这里插入图片描述
web views.py

#!/usr/bin/env python
#coding:utf-8
from django.shortcuts import render, redirect, render_to_response

# Create your views here.
def login(request):
    #定义字典类型的返回消息ret
    ret = {'status':''}
    #如果有收到客户端的登录请求
    if request.method == "POST":
        #从客户端发送的POST数据中取key为username的值,若不存在则返回None
        username = request.POST.get("username",None)
        password = request.POST.get("password",None)
        is_auth = all([username,password])
        #若用户信息均获取到,则对用户身份做验证
        if is_auth:
            #在数据库中查询当前用户信息
            count = models.UserInfo.objects.filter(username=username,password=password).count()
            #若用户信息在数据库中已存在
            if count == 1:
                return redirect("/web/index/")
            else:
                ret['status'] = "用户名或密码错误!"
        else:
            ret['status'] = '用户名或密码不能为空!'
    #login方法执行完毕后,返回执行结果
    return render_to_response('web/login.html',ret)
def index(request):
    return render_to_response('web/index.html')

修改settings文件,规避"CSRF verification failed. Request aborted"错误

在这里插入图片描述

项目主页

在web views.py文件中配置项目主页方法

def index(request):
    return render_to_response('web/index.html')

在web urls.py文件中配置项目主页URL访问路径

urlpatterns = [

    path('login/', views.login),
    path('index/', views.index),
]

在templates web目录下创建项目主页HTML页面index.html

<!doctype html>
<html>
    <head>
	    <!--对页面编码进行设置-->
	    <meta http-equiv="content-type" content="text/html;charset=utf-8">
		<!--兼容IE6浏览器-->
		<meta http-equiv="X-UA-Compatible" content="IE=Edge">
		<title>demo 10</title>
		<style>
			.hide{
			    display:none;
			}
			.clearfix:after{
			    content:".";
				display:block;
				height:0;
				clear:both;
				visibility:hidden;
			}
		</style>

	</head>
	<body>
	    <h1>主机管理示例</h1>
		<ul>
		    <li><a href="/web/user/ ">用户管理</a></li>
		    <li><a href="/web/usergroup/ ">用户组管理</a></li>
		    <li><a href="/web/host ">主机管理</a></li>
		</ul>

		<!--引入jQuery文件-->
	    <script src="jquery-1.11.0.min.js"></script>
	    <script type="text/javascript">

		</script>
	</body>
</html>

项目主页中的主机管理模块

在web models.py文件中配置主机管理数据库表

class UserGroup(models.Model):
    GroupName = models.CharField(max_length=50)
    user = models.ManyToManyField('UserInfo')
#资产表:
class Asset(models.Model):
    hostname = models.CharField(max_length=256)
    ip = models.GenericIPAddressField()
    user_group = models.ForeignKey(to='UserGroup',on_delete=models.CASCADE )
    #此时,打印Asset对象时输出hostname
    #当输出print(类对象)时,"__unicode__"显示什么值,print就输出什么值。即使用"__unicode__"可以任意规定类对象返回(输出)的值。
    def __unicode__(self):
        print(u'当前Asset对象中包含(%s,%s)' %(self.hostname,self.ip))
        return self.hostname

在web views.py文件中配置主机管理模块方法

def host(request):
    ret = {'status':'','data':None,'group':None}
    usergroup = models.UserGroup.objects.all()
    ret['group'] = usergroup
    #新建主机
    if request.method == 'POST':
        hostname = request.POST.get('hostname',None)
        ip = request.POST.get('ip',None)
        groupId = request.POST.get('group',None)
        #验证用户输入是否为空
        is_auth = all([hostname,ip])
        if is_auth:
            #select数据
            groupObj = models.UserGroup.objects.get(id=groupId)
            #插入数据
            models.Asset.objects.create(hostname=hostname,
                                        ip=ip,
                                        user_group=groupObj)
        else:
            ret['status'] = 'hostname或ip不能为空'
    data = models.Asset.objects.all()
    #使用user_group__GroupName='用户组B'过滤组名是用户组B的全部资产信息。其中GroupName前面是双下划线
    #models.Asset.onjects.filter(user_group__GroupName='用户组B')
    #等同于 select * from web_asset LEFT JOIN web_usergroup on web_usergroup.GroupName='用户组B'
    ret['data'] = data
    return render_to_response('web/host.html', ret)

在web urls.py文件中配置主机管理模块URL访问路径

from django.contrib import admin
from django.urls import path
from web import views
urlpatterns = [

    path('login/', views.login),
    path('index/', views.index),
    path('host/', views.host),
    path('register/', views.register),
]

在templates web目录下创建主机管理模块HTML页面

<!doctype html>
<html>
    <head>
	    <!--对页面编码进行设置-->
	    <meta http-equiv="content-type" content="text/html;charset=utf-8">
		<!--兼容IE6浏览器-->
		<meta http-equiv="X-UA-Compatible" content="IE=Edge">
		<title>demo 10</title>
		<style>
			.hide{
			    display:none;
			}
			.clearfix:after{
			    content:".";
				display:block;
				height:0;
				clear:both;
				visibility:hidden;
			}
			.add{
			    margin:20px;
				padding:20px;
				border:1px solid #ddd;
			}
			.list{
			    padding:20px;
				margin:20px;
				border:1px solid #ddd;
			}
		</style>

	</head>
	<body>
	    <div class="add">
		    <h3>添加主机</h3>
			<h6 style="color:red;" >{{status}}</h6>
			<form action="/web/host/" method="POST">
			    <p><input name="hostname" placeholder="hostname"></p>
			    <p><input name="ip" placeholder="ip"></p>
				<p>
				    <select name="group">
					    {% for item in group %}
						    <option value="{{ item.id }}">{{ item.GroupName }}</option>
						{% endfor %}
					</select>
				</p>
				<p><input type="submit" value="添加" ></p>
			</form>
		</div>
		
		<div class="list">
		    <h3>主机列表</h3>
			<table border="1">
			    <tr>
				    <td>主机名</td>
				    <td>IP</td>
				    <td>所属用户组</td>
				</tr>
				{% for item in data %}
				    			    <tr>
				    <td>{{ item.hostname }}</td>
				    <td>{{ item.ip }}</td>
					<!--获取外联用户组的名称-->
				    <td>{{ item.user_group.GroupName }}</td>
				</tr>
				{% endfor%}
			</table>
		</div>

		<!--引入jQuery文件-->
	    <script src="jquery-1.11.0.min.js"></script>
	    <script type="text/javascript">
		</script>
	</body>
</html>

·

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
抱歉,我是一位AI语言模型,无法编写完整Django框架。不过,以下是一些简单的步骤和代码示例,可以帮助您开始使用Django。 1. 安装Django 您可以使用以下命令安装Django: ``` pip install django ``` 2. 创建Django项目 运行以下命令以创建一个名为“myproject”的Django项目: ``` django-admin startproject myproject ``` 3. 创建Django应用程序 在Django项目中,可以创建多个应用程序。运行以下命令以创建一个名为“myapp”的Django应用程序: ``` python manage.py startapp myapp ``` 4. 定义模型 在Django中,模型用于定义数据结构。在“myapp”应用程序中,创建一个名为“models.py”的文件,并在其中定义模型: ```python from django.db import models class MyModel(models.Model): name = models.CharField(max_length=100) email = models.EmailField() def __str__(self): return self.name ``` 5. 创建数据库表 运行以下命令以创建数据库表: ``` python manage.py makemigrations python manage.py migrate ``` 6. 创建视图 在Django中,视图处理HTTP请求并返回响应。在“myapp”应用程序中,创建一个名为“views.py”的文件,并在其中定义视图: ```python from django.shortcuts import render from django.http import HttpResponse from .models import MyModel def index(request): mymodels = MyModel.objects.all() return render(request, 'index.html', {'mymodels': mymodels}) ``` 7. 创建模板 在Django中,模板用于呈现HTML页面。在“myapp”应用程序中,创建一个名为“templates”的文件夹,并在其中创建一个名为“index.html”的文件: ```html <!DOCTYPE html> <html> <head> <title>My App</title> </head> <body> <h1>My Models</h1> <ul> {% for mymodel in mymodels %} <li>{{ mymodel }}</li> {% endfor %} </ul> </body> </html> ``` 8. 配置URL 在Django中,URL用于将请求与视图匹配。在“myproject”项目中,编辑名为“urls.py”的文件,并添加以下内容: ```python from django.urls import path from myapp.views import index urlpatterns = [ path('', index, name='index'), ] ``` 9. 运行Django服务器 运行以下命令以启动Django服务器: ``` python manage.py runserver ``` 现在,您可以在浏览器中访问“http://127.0.0.1:8000/”查看您的Django应用程序。 这只是一个简单的示例,Django还有很多功能和特性。您可以查看Django官方文档以了解更多信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值